Added support for HTTP HEAD against metadata endpoint (#6152)

* Added support for HTTP HEAD

* Renamed file to issue number and added issue number

* Moved to 7.6
This commit is contained in:
Jens Kristian Villadsen 2024-10-18 11:45:04 +02:00 committed by GitHub
parent 5b23e1bbec
commit 3e715665a1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 21 additions and 2 deletions

View File

@ -0,0 +1,4 @@
---
type: add
issue: 6152
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 ("metadata".equals(theRequest.getOperation())) {
if (theRequest.getRequestType() == RequestTypeEnum.GET) { if (theRequest.getRequestType() == RequestTypeEnum.GET
|| theRequest.getRequestType() == RequestTypeEnum.HEAD) {
return MethodMatchEnum.EXACT; return MethodMatchEnum.EXACT;
} }
throw new MethodNotAllowedException( 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; 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.context.FhirContext;
import ca.uhn.fhir.rest.annotation.Metadata; import ca.uhn.fhir.rest.annotation.Metadata;
import ca.uhn.fhir.rest.api.Constants; 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.IRestfulServer;
import ca.uhn.fhir.rest.api.server.RequestDetails; import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails; import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
@ -18,6 +19,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
@ -106,6 +108,18 @@ public class ConformanceMethodBindingTest {
verify(provider, times(2)).getServerConformance(any(), any()); 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") @SuppressWarnings("unused")
static class TestResourceProvider { static class TestResourceProvider {