WebFlux supports HTTP HEAD

Issue: SPR-15994
This commit is contained in:
Rossen Stoyanchev
2017-09-27 14:57:56 -04:00
parent d8d74faab8
commit 6ee1af27c6
10 changed files with 153 additions and 35 deletions

View File

@@ -36,7 +36,9 @@ import org.springframework.http.client.reactive.ClientHttpConnector;
import org.springframework.http.client.reactive.ClientHttpRequest;
import org.springframework.http.client.reactive.ClientHttpResponse;
import org.springframework.http.server.reactive.HttpHandler;
import org.springframework.http.server.reactive.HttpHeadResponseDecorator;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.mock.http.client.reactive.MockClientHttpRequest;
import org.springframework.mock.http.client.reactive.MockClientHttpResponse;
import org.springframework.mock.http.server.reactive.MockServerHttpRequest;
@@ -84,7 +86,8 @@ public class HttpHandlerConnector implements ClientHttpConnector {
mockClientRequest.setWriteHandler(requestBody -> {
log("Invoking HttpHandler for ", httpMethod, uri);
ServerHttpRequest mockServerRequest = adaptRequest(mockClientRequest, requestBody);
this.handler.handle(mockServerRequest, mockServerResponse).subscribe(aVoid -> {}, result::onError);
ServerHttpResponse responseToUse = prepareResponse(mockServerResponse, mockServerRequest);
this.handler.handle(mockServerRequest, responseToUse).subscribe(aVoid -> {}, result::onError);
return Mono.empty();
});
@@ -114,6 +117,11 @@ public class HttpHandlerConnector implements ClientHttpConnector {
return MockServerHttpRequest.method(method, uri).headers(headers).cookies(cookies).body(body);
}
private ServerHttpResponse prepareResponse(ServerHttpResponse response, ServerHttpRequest request) {
return HttpMethod.HEAD.equals(request.getMethod()) ?
new HttpHeadResponseDecorator(response) : response;
}
private ClientHttpResponse adaptResponse(MockServerHttpResponse response, Flux<DataBuffer> body) {
HttpStatus status = Optional.ofNullable(response.getStatusCode()).orElse(HttpStatus.OK);
MockClientHttpResponse clientResponse = new MockClientHttpResponse(status);