@@ -214,59 +214,58 @@ protected <T> void writeWithMessageConverters(@Nullable T value, MethodParameter
214
214
}
215
215
}
216
216
217
-
218
- List <MediaType > mediaTypesToUse ;
219
-
217
+ MediaType selectedMediaType = null ;
220
218
MediaType contentType = outputMessage .getHeaders ().getContentType ();
221
219
if (contentType != null && contentType .isConcrete ()) {
222
220
if (logger .isDebugEnabled ()) {
223
221
logger .debug ("Found 'Content-Type:" + contentType + "' in response" );
224
222
}
225
- mediaTypesToUse = Collections . singletonList ( contentType ) ;
223
+ selectedMediaType = contentType ;
226
224
}
227
225
else {
228
226
HttpServletRequest request = inputMessage .getServletRequest ();
229
- List <MediaType > requestedMediaTypes = getAcceptableMediaTypes (request );
230
- List <MediaType > producibleMediaTypes = getProducibleMediaTypes (request , valueType , targetType );
227
+ List <MediaType > acceptableTypes = getAcceptableMediaTypes (request );
228
+ List <MediaType > producibleTypes = getProducibleMediaTypes (request , valueType , targetType );
231
229
232
- if (body != null && producibleMediaTypes .isEmpty ()) {
230
+ if (body != null && producibleTypes .isEmpty ()) {
233
231
throw new HttpMessageNotWritableException (
234
232
"No converter found for return value of type: " + valueType );
235
233
}
236
- mediaTypesToUse = new ArrayList <>();
237
- for (MediaType requestedType : requestedMediaTypes ) {
238
- for (MediaType producibleType : producibleMediaTypes ) {
234
+ List < MediaType > mediaTypesToUse = new ArrayList <>();
235
+ for (MediaType requestedType : acceptableTypes ) {
236
+ for (MediaType producibleType : producibleTypes ) {
239
237
if (requestedType .isCompatibleWith (producibleType )) {
240
238
mediaTypesToUse .add (getMostSpecificMediaType (requestedType , producibleType ));
241
239
}
242
240
}
243
241
}
244
- if (logger .isDebugEnabled ()) {
245
- logger .debug ("No match for " + requestedMediaTypes + ", supported: " + producibleMediaTypes );
246
- }
247
242
if (mediaTypesToUse .isEmpty ()) {
248
243
if (body != null ) {
249
- throw new HttpMediaTypeNotAcceptableException (producibleMediaTypes );
244
+ throw new HttpMediaTypeNotAcceptableException (producibleTypes );
245
+ }
246
+ if (logger .isDebugEnabled ()) {
247
+ logger .debug ("No match for " + acceptableTypes + ", supported: " + producibleTypes );
250
248
}
251
249
return ;
252
250
}
251
+
253
252
MediaType .sortBySpecificityAndQuality (mediaTypesToUse );
254
- }
255
253
256
- MediaType selectedMediaType = null ;
257
- for ( MediaType mediaType : mediaTypesToUse ) {
258
- if ( mediaType . isConcrete ()) {
259
- selectedMediaType = mediaType ;
260
- break ;
261
- }
262
- else if ( mediaType . equals ( MediaType .ALL ) || mediaType . equals ( MEDIA_TYPE_APPLICATION )) {
263
- selectedMediaType = MediaType . APPLICATION_OCTET_STREAM ;
264
- break ;
254
+ for ( MediaType mediaType : mediaTypesToUse ) {
255
+ if ( mediaType . isConcrete () ) {
256
+ selectedMediaType = mediaType ;
257
+ break ;
258
+ }
259
+ else if ( mediaType . equals ( MediaType . ALL ) || mediaType . equals ( MEDIA_TYPE_APPLICATION )) {
260
+ selectedMediaType = MediaType .APPLICATION_OCTET_STREAM ;
261
+ break ;
262
+ }
265
263
}
266
- }
267
264
268
- if (logger .isDebugEnabled ()) {
269
- logger .debug ("Using '" + selectedMediaType + "' given " + mediaTypesToUse );
265
+ if (logger .isDebugEnabled ()) {
266
+ logger .debug ("Using '" + selectedMediaType + "', given " +
267
+ acceptableTypes + " and supported " + producibleTypes );
268
+ }
270
269
}
271
270
272
271
if (selectedMediaType != null ) {
0 commit comments