Skip to content

Commit 1a9f19f

Browse files
committed
Update use of preset content-type for streaming
For 7.0 we can favor more explicitly a preset Content-type. Closes gh-35130
1 parent 817136a commit 1a9f19f

File tree

1 file changed

+4
-15
lines changed

1 file changed

+4
-15
lines changed

spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ReactiveTypeHandler.java

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public boolean isReactiveType(Class<?> type) {
136136
* with a {@link DeferredResult}
137137
*/
138138
public @Nullable ResponseBodyEmitter handleValue(
139-
Object returnValue, MethodParameter returnType, @Nullable MediaType presetContentType,
139+
Object returnValue, MethodParameter returnType, @Nullable MediaType presetMediaType,
140140
ModelAndViewContainer mav, NativeWebRequest request) throws Exception {
141141

142142
Assert.notNull(returnValue, "Expected return value");
@@ -155,7 +155,7 @@ public boolean isReactiveType(Class<?> type) {
155155
ResolvableType elementType = ResolvableType.forMethodParameter(returnType).getGeneric();
156156
Class<?> elementClass = elementType.toClass();
157157

158-
Collection<MediaType> mediaTypes = getMediaTypes(request, presetContentType);
158+
Collection<MediaType> mediaTypes = (presetMediaType != null ? List.of(presetMediaType) : getMediaTypes(request));
159159
Optional<MediaType> mediaType = mediaTypes.stream().filter(MimeType::isConcrete).findFirst();
160160

161161
if (adapter.isMultiValue()) {
@@ -221,25 +221,14 @@ else if (MediaType.APPLICATION_NDJSON.includes(acceptedType)) {
221221
}
222222

223223
@SuppressWarnings("unchecked")
224-
private Collection<MediaType> getMediaTypes(NativeWebRequest request, @Nullable MediaType contentType)
224+
private Collection<MediaType> getMediaTypes(NativeWebRequest request)
225225
throws HttpMediaTypeNotAcceptableException {
226226

227227
Collection<MediaType> producibleMediaTypes = (Collection<MediaType>) request.getAttribute(
228228
HandlerMapping.PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST);
229229

230-
Collection<MediaType> mediaTypes = (CollectionUtils.isEmpty(producibleMediaTypes) ?
230+
return (CollectionUtils.isEmpty(producibleMediaTypes) ?
231231
this.contentNegotiationManager.resolveMediaTypes(request) : producibleMediaTypes);
232-
233-
if (contentType != null) {
234-
for (MediaType mediaType : mediaTypes) {
235-
if (mediaType.isConcrete()) {
236-
return mediaTypes;
237-
}
238-
}
239-
return List.of(contentType);
240-
}
241-
242-
return mediaTypes;
243232
}
244233

245234
private ResponseBodyEmitter getEmitter(MediaType mediaType) {

0 commit comments

Comments
 (0)