INT-4350: Handle ResponseEntity in HTTP Inbounds
JIRA: https://jira.spring.io/browse/INT-4350 Spring MVC and Spring WebFlux handles `ResponseEntity` via appropriate `ReturnValue` handlers. This way all the headers and status code are fully up to end-user. The body is handled by the appropriate converter/writer as before * Add `ResponseEntity` handling to the `HttpRequestHandlingMessagingGateway` and `WebFluxInboundEndpoint`. The logic mostly compy/pasted from the `ResponseEntityResultHandler`
This commit is contained in:
committed by
Gary Russell
parent
008a740fb0
commit
6d96914c1f
@@ -24,8 +24,10 @@ import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.http.converter.HttpMessageConverter;
|
||||
import org.springframework.http.server.ServletServerHttpRequest;
|
||||
import org.springframework.http.server.ServletServerHttpResponse;
|
||||
@@ -114,7 +116,27 @@ public class HttpRequestHandlingMessagingGateway extends HttpRequestHandlingEndp
|
||||
response.setStatusCode((HttpStatus) responseContent);
|
||||
}
|
||||
else {
|
||||
this.writeResponse(responseContent, response, request.getHeaders().getAccept());
|
||||
if (responseContent instanceof ResponseEntity) {
|
||||
ResponseEntity<?> responseEntity = (ResponseEntity<?>) responseContent;
|
||||
responseContent = responseEntity.getBody();
|
||||
response.setStatusCode(responseEntity.getStatusCode());
|
||||
|
||||
HttpHeaders outputHeaders = response.getHeaders();
|
||||
HttpHeaders entityHeaders = responseEntity.getHeaders();
|
||||
|
||||
if (!entityHeaders.isEmpty()) {
|
||||
entityHeaders.entrySet().stream()
|
||||
.filter(entry -> !outputHeaders.containsKey(entry.getKey()))
|
||||
.forEach(entry -> outputHeaders.put(entry.getKey(), entry.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
if (responseContent != null) {
|
||||
writeResponse(responseContent, response, request.getHeaders().getAccept());
|
||||
}
|
||||
else {
|
||||
response.flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user