Take content-type from ResponseEntity unconditionally
From #9a894a we began using the content-type from the ResponseEntity but cross-checking it still against the requested content type. Arguably there isn't any purpose in cross-checking. The only possible outcomes are: a) it's compatible or b) it's not, which would result in 406 (NOT_ACCEPTABLE). As we've been given explicitly the media type to use, it makes little sense to send 406, ignoring the wish to use that content type. Issue: SPR-16251
This commit is contained in:
@@ -116,6 +116,11 @@ public abstract class HandlerResultHandlerSupport implements Ordered {
|
||||
protected MediaType selectMediaType(ServerWebExchange exchange,
|
||||
Supplier<List<MediaType>> producibleTypesSupplier) {
|
||||
|
||||
MediaType contentType = exchange.getResponse().getHeaders().getContentType();
|
||||
if (contentType != null && contentType.isConcrete()) {
|
||||
return contentType;
|
||||
}
|
||||
|
||||
List<MediaType> acceptableTypes = getAcceptableTypes(exchange);
|
||||
List<MediaType> producibleTypes = getProducibleTypes(exchange, producibleTypesSupplier);
|
||||
|
||||
@@ -152,10 +157,6 @@ public abstract class HandlerResultHandlerSupport implements Ordered {
|
||||
private List<MediaType> getProducibleTypes(ServerWebExchange exchange,
|
||||
Supplier<List<MediaType>> producibleTypesSupplier) {
|
||||
|
||||
MediaType contentType = exchange.getResponse().getHeaders().getContentType();
|
||||
if (contentType != null && contentType.isConcrete()) {
|
||||
return Collections.singletonList(contentType);
|
||||
}
|
||||
Set<MediaType> mediaTypes = exchange.getAttribute(HandlerMapping.PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE);
|
||||
return (mediaTypes != null ? new ArrayList<>(mediaTypes) : producibleTypesSupplier.get());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user