Add HEAD support in MVC/WebFlux Resource handling
This commit introduces explicit HEAD support in Spring MVC's ResourceHttpRequestHandler and WebFlux's ResourceWebHandler, adding just headers but no body. Closes gh-28291
This commit is contained in:
@@ -438,10 +438,17 @@ public class ResourceWebHandler implements WebHandler, InitializingBean {
|
||||
// Content phase
|
||||
ResourceHttpMessageWriter writer = getResourceHttpMessageWriter();
|
||||
Assert.state(writer != null, "No ResourceHttpMessageWriter");
|
||||
return writer.write(Mono.just(resource),
|
||||
null, ResolvableType.forClass(Resource.class), mediaType,
|
||||
exchange.getRequest(), exchange.getResponse(),
|
||||
Hints.from(Hints.LOG_PREFIX_HINT, exchange.getLogPrefix()));
|
||||
if (HttpMethod.HEAD == httpMethod) {
|
||||
writer.addHeaders(exchange.getResponse(), resource, mediaType,
|
||||
Hints.from(Hints.LOG_PREFIX_HINT, exchange.getLogPrefix()));
|
||||
return exchange.getResponse().setComplete();
|
||||
}
|
||||
else {
|
||||
return writer.write(Mono.just(resource),
|
||||
null, ResolvableType.forClass(Resource.class), mediaType,
|
||||
exchange.getRequest(), exchange.getResponse(),
|
||||
Hints.from(Hints.LOG_PREFIX_HINT, exchange.getLogPrefix()));
|
||||
}
|
||||
}
|
||||
catch (IOException ex) {
|
||||
return Mono.error(ex);
|
||||
|
||||
@@ -120,7 +120,10 @@ public class ResourceWebHandlerTests {
|
||||
assertThat(headers.containsKey("Last-Modified")).isTrue();
|
||||
assertThat(resourceLastModifiedDate("test/foo.css") / 1000).isEqualTo(headers.getLastModified() / 1000);
|
||||
assertThat(headers.getFirst("Accept-Ranges")).isEqualTo("bytes");
|
||||
assertThat(headers.get("Accept-Ranges").size()).isEqualTo(1);
|
||||
assertThat(headers.get("Accept-Ranges")).hasSize(1);
|
||||
|
||||
StepVerifier.create(exchange.getResponse().getBody())
|
||||
.verifyComplete();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user