Skip to content

Commit 0be8c20

Browse files
committed
Consistent logging of selected media types
1 parent 36a07aa commit 0be8c20

File tree

2 files changed

+39
-38
lines changed

2 files changed

+39
-38
lines changed

spring-webflux/src/main/java/org/springframework/web/reactive/result/HandlerResultHandlerSupport.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -143,28 +143,30 @@ protected MediaType selectMediaType(ServerWebExchange exchange,
143143
List<MediaType> result = new ArrayList<>(compatibleMediaTypes);
144144
MediaType.sortBySpecificityAndQuality(result);
145145

146+
MediaType selected = null;
146147
for (MediaType mediaType : result) {
147148
if (mediaType.isConcrete()) {
148-
if (logger.isDebugEnabled()) {
149-
logger.debug(exchange.getLogPrefix() + "Using '" + mediaType + "' given " + acceptableTypes);
150-
}
151-
return mediaType;
149+
selected = mediaType;
150+
break;
152151
}
153152
else if (mediaType.equals(MediaType.ALL) || mediaType.equals(MEDIA_TYPE_APPLICATION_ALL)) {
154-
mediaType = MediaType.APPLICATION_OCTET_STREAM;
155-
if (logger.isDebugEnabled()) {
156-
logger.debug(exchange.getLogPrefix() + "Using '" + mediaType + "' given " + acceptableTypes);
157-
}
158-
return mediaType;
153+
selected = MediaType.APPLICATION_OCTET_STREAM;
154+
break;
159155
}
160156
}
161157

162-
if (logger.isDebugEnabled()) {
158+
if (selected != null) {
159+
if (logger.isDebugEnabled()) {
160+
logger.debug("Using '" + selected + "' given " +
161+
acceptableTypes + " and supported " + producibleTypes);
162+
}
163+
}
164+
else if (logger.isDebugEnabled()) {
163165
logger.debug(exchange.getLogPrefix() +
164166
"No match for " + acceptableTypes + ", supported: " + producibleTypes);
165167
}
166168

167-
return null;
169+
return selected;
168170
}
169171

170172
private List<MediaType> getAcceptableTypes(ServerWebExchange exchange) {

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

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -214,59 +214,58 @@ protected <T> void writeWithMessageConverters(@Nullable T value, MethodParameter
214214
}
215215
}
216216

217-
218-
List<MediaType> mediaTypesToUse;
219-
217+
MediaType selectedMediaType = null;
220218
MediaType contentType = outputMessage.getHeaders().getContentType();
221219
if (contentType != null && contentType.isConcrete()) {
222220
if (logger.isDebugEnabled()) {
223221
logger.debug("Found 'Content-Type:" + contentType + "' in response");
224222
}
225-
mediaTypesToUse = Collections.singletonList(contentType);
223+
selectedMediaType = contentType;
226224
}
227225
else {
228226
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);
231229

232-
if (body != null && producibleMediaTypes.isEmpty()) {
230+
if (body != null && producibleTypes.isEmpty()) {
233231
throw new HttpMessageNotWritableException(
234232
"No converter found for return value of type: " + valueType);
235233
}
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) {
239237
if (requestedType.isCompatibleWith(producibleType)) {
240238
mediaTypesToUse.add(getMostSpecificMediaType(requestedType, producibleType));
241239
}
242240
}
243241
}
244-
if (logger.isDebugEnabled()) {
245-
logger.debug("No match for " + requestedMediaTypes + ", supported: " + producibleMediaTypes);
246-
}
247242
if (mediaTypesToUse.isEmpty()) {
248243
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);
250248
}
251249
return;
252250
}
251+
253252
MediaType.sortBySpecificityAndQuality(mediaTypesToUse);
254-
}
255253

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+
}
265263
}
266-
}
267264

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+
}
270269
}
271270

272271
if (selectedMediaType != null) {

0 commit comments

Comments
 (0)