Update use of preset content-type for streaming
For 7.0 we can favor more explicitly a preset Content-type. Closes gh-35130
This commit is contained in:
parent
817136a0e9
commit
1a9f19f87f
|
@ -136,7 +136,7 @@ class ReactiveTypeHandler {
|
||||||
* with a {@link DeferredResult}
|
* with a {@link DeferredResult}
|
||||||
*/
|
*/
|
||||||
public @Nullable ResponseBodyEmitter handleValue(
|
public @Nullable ResponseBodyEmitter handleValue(
|
||||||
Object returnValue, MethodParameter returnType, @Nullable MediaType presetContentType,
|
Object returnValue, MethodParameter returnType, @Nullable MediaType presetMediaType,
|
||||||
ModelAndViewContainer mav, NativeWebRequest request) throws Exception {
|
ModelAndViewContainer mav, NativeWebRequest request) throws Exception {
|
||||||
|
|
||||||
Assert.notNull(returnValue, "Expected return value");
|
Assert.notNull(returnValue, "Expected return value");
|
||||||
|
@ -155,7 +155,7 @@ class ReactiveTypeHandler {
|
||||||
ResolvableType elementType = ResolvableType.forMethodParameter(returnType).getGeneric();
|
ResolvableType elementType = ResolvableType.forMethodParameter(returnType).getGeneric();
|
||||||
Class<?> elementClass = elementType.toClass();
|
Class<?> elementClass = elementType.toClass();
|
||||||
|
|
||||||
Collection<MediaType> mediaTypes = getMediaTypes(request, presetContentType);
|
Collection<MediaType> mediaTypes = (presetMediaType != null ? List.of(presetMediaType) : getMediaTypes(request));
|
||||||
Optional<MediaType> mediaType = mediaTypes.stream().filter(MimeType::isConcrete).findFirst();
|
Optional<MediaType> mediaType = mediaTypes.stream().filter(MimeType::isConcrete).findFirst();
|
||||||
|
|
||||||
if (adapter.isMultiValue()) {
|
if (adapter.isMultiValue()) {
|
||||||
|
@ -221,25 +221,14 @@ class ReactiveTypeHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private Collection<MediaType> getMediaTypes(NativeWebRequest request, @Nullable MediaType contentType)
|
private Collection<MediaType> getMediaTypes(NativeWebRequest request)
|
||||||
throws HttpMediaTypeNotAcceptableException {
|
throws HttpMediaTypeNotAcceptableException {
|
||||||
|
|
||||||
Collection<MediaType> producibleMediaTypes = (Collection<MediaType>) request.getAttribute(
|
Collection<MediaType> producibleMediaTypes = (Collection<MediaType>) request.getAttribute(
|
||||||
HandlerMapping.PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST);
|
HandlerMapping.PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST);
|
||||||
|
|
||||||
Collection<MediaType> mediaTypes = (CollectionUtils.isEmpty(producibleMediaTypes) ?
|
return (CollectionUtils.isEmpty(producibleMediaTypes) ?
|
||||||
this.contentNegotiationManager.resolveMediaTypes(request) : producibleMediaTypes);
|
this.contentNegotiationManager.resolveMediaTypes(request) : producibleMediaTypes);
|
||||||
|
|
||||||
if (contentType != null) {
|
|
||||||
for (MediaType mediaType : mediaTypes) {
|
|
||||||
if (mediaType.isConcrete()) {
|
|
||||||
return mediaTypes;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return List.of(contentType);
|
|
||||||
}
|
|
||||||
|
|
||||||
return mediaTypes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ResponseBodyEmitter getEmitter(MediaType mediaType) {
|
private ResponseBodyEmitter getEmitter(MediaType mediaType) {
|
||||||
|
|
Loading…
Reference in New Issue