Add support for headers in @HttpExchange
On the client side, supports `name=value` pairs. Placeholders in values are resolved by the `embeddedValueResolver`. On the server side, additionally supports `name` and `!name` syntax. Closes gh-33309
This commit is contained in:
@@ -431,6 +431,26 @@ class RequestMappingHandlerMappingTests {
|
||||
.containsOnly(MediaType.valueOf("text/plain;charset=UTF-8"));
|
||||
}
|
||||
|
||||
@SuppressWarnings("DataFlowIssue")
|
||||
@Test
|
||||
void httpExchangeWithCustomHeaders() throws Exception {
|
||||
RequestMappingHandlerMapping mapping = createMapping();
|
||||
|
||||
RequestMappingInfo mappingInfo = mapping.getMappingForMethod(
|
||||
HttpExchangeController.class.getMethod("customHeadersExchange"),
|
||||
HttpExchangeController.class);
|
||||
|
||||
assertThat(mappingInfo.getPathPatternsCondition().getPatterns())
|
||||
.extracting(PathPattern::toString)
|
||||
.containsOnly("/exchange/headers");
|
||||
|
||||
assertThat(mappingInfo.getMethodsCondition().getMethods()).containsOnly(RequestMethod.GET);
|
||||
assertThat(mappingInfo.getParamsCondition().getExpressions()).isEmpty();
|
||||
|
||||
assertThat(mappingInfo.getHeadersCondition().getExpressions().stream().map(Object::toString))
|
||||
.containsExactly("h1=hv1", "!h2");
|
||||
}
|
||||
|
||||
private static RequestMappingHandlerMapping createMapping() {
|
||||
RequestMappingHandlerMapping mapping = new RequestMappingHandlerMapping();
|
||||
mapping.setApplicationContext(new StaticWebApplicationContext());
|
||||
@@ -543,6 +563,12 @@ class RequestMappingHandlerMappingTests {
|
||||
|
||||
@PostExchange(url = "/custom", contentType = "application/json", accept = "text/plain;charset=UTF-8")
|
||||
public void customValuesExchange(){}
|
||||
|
||||
@HttpExchange(method="GET", url = "/headers",
|
||||
headers = {"h1=hv1", "!h2", "Accept=application/ignored"})
|
||||
public String customHeadersExchange() {
|
||||
return "info";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user