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:
parent
5b23e1bbec
commit
3e715665a1
|
@ -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!"
|
|
@ -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;
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue