Added support for HTTP HEAD

This commit is contained in:
Jens Kristian Villadsen 2024-07-25 14:16:33 +02:00
parent fcb69e600f
commit f50c083680
3 changed files with 21 additions and 2 deletions

View File

@ -0,0 +1,4 @@
---
type: add
issue: xxxx
title: "Added the option to do HTTP HEAD requests against /metadata. Thanks to Jens Villadsen (@jkiddo) for the contribution!"

View File

@ -220,11 +220,12 @@ public class ConformanceMethodBinding extends BaseResourceReturningMethodBinding
}
if ("metadata".equals(theRequest.getOperation())) {
if (theRequest.getRequestType() == RequestTypeEnum.GET) {
if (theRequest.getRequestType() == RequestTypeEnum.GET
|| theRequest.getRequestType() == RequestTypeEnum.HEAD) {
return MethodMatchEnum.EXACT;
}
throw new MethodNotAllowedException(
Msg.code(388) + "/metadata request must use HTTP GET", RequestTypeEnum.GET);
Msg.code(388) + "/metadata request must use HTTP GET or HTTP HEAD", RequestTypeEnum.GET);
}
return MethodMatchEnum.NONE;

View File

@ -3,6 +3,7 @@ package ca.uhn.fhir.rest.server.method;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.rest.annotation.Metadata;
import ca.uhn.fhir.rest.api.Constants;
import ca.uhn.fhir.rest.api.RequestTypeEnum;
import ca.uhn.fhir.rest.api.server.IRestfulServer;
import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
@ -18,6 +19,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
import java.lang.reflect.Method;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
@ -106,6 +108,18 @@ public class ConformanceMethodBindingTest {
verify(provider, times(2)).getServerConformance(any(), any());
}
@Test
public void invokeServer_metadata() {
RequestDetails requestDetails = mySrd;
when(requestDetails.getOperation()).thenReturn("metadata");
when(requestDetails.getRequestType()).thenReturn(RequestTypeEnum.GET);
assertEquals(conformanceMethodBinding.incomingServerRequestMatchesMethod(requestDetails), MethodMatchEnum.EXACT);
when(requestDetails.getRequestType()).thenReturn(RequestTypeEnum.HEAD);
assertEquals(conformanceMethodBinding.incomingServerRequestMatchesMethod(requestDetails), MethodMatchEnum.EXACT);
}
@SuppressWarnings("unused")
static class TestResourceProvider {