SPR-6976 - Add debug log for HttpMessageConverter usage
This commit is contained in:
parent
5a8aa53232
commit
4880d1d461
|
|
@ -860,6 +860,14 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator
|
|||
for (HttpMessageConverter messageConverter : getMessageConverters()) {
|
||||
if (messageConverter.canWrite(returnValueType, acceptedMediaType)) {
|
||||
messageConverter.write(returnValue, acceptedMediaType, outputMessage);
|
||||
if (logger.isDebugEnabled()) {
|
||||
MediaType contentType = outputMessage.getHeaders().getContentType();
|
||||
if (contentType == null) {
|
||||
contentType = acceptedMediaType;
|
||||
}
|
||||
logger.debug("Written [" + returnValue + "] as \"" + contentType +
|
||||
"\" using [" + messageConverter + "]");
|
||||
}
|
||||
this.responseArgumentUsed = true;
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -549,6 +549,10 @@ public class HandlerMethodInvoker {
|
|||
for (HttpMessageConverter<?> messageConverter : this.messageConverters) {
|
||||
allSupportedMediaTypes.addAll(messageConverter.getSupportedMediaTypes());
|
||||
if (messageConverter.canRead(paramType, contentType)) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Reading [" + paramType.getName() + "] as \"" + contentType
|
||||
+"\" using [" + messageConverter + "]");
|
||||
}
|
||||
return messageConverter.read(paramType, inputMessage);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2009 the original author or authors.
|
||||
* Copyright 2002-2010 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -19,6 +19,9 @@ package org.springframework.web.client;
|
|||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.client.ClientHttpResponse;
|
||||
import org.springframework.http.converter.HttpMessageConverter;
|
||||
|
|
@ -38,15 +41,22 @@ public class HttpMessageConverterExtractor<T> implements ResponseExtractor<T> {
|
|||
|
||||
private final List<HttpMessageConverter<?>> messageConverters;
|
||||
|
||||
private final Log logger;
|
||||
|
||||
/**
|
||||
* Creates a new instance of the {@code HttpMessageConverterExtractor} with the given response type and message
|
||||
* converters. The given converters must support the response type.
|
||||
*/
|
||||
public HttpMessageConverterExtractor(Class<T> responseType, List<HttpMessageConverter<?>> messageConverters) {
|
||||
this(responseType, messageConverters, LogFactory.getLog(HttpMessageConverterExtractor.class));
|
||||
}
|
||||
|
||||
HttpMessageConverterExtractor(Class<T> responseType, List<HttpMessageConverter<?>> messageConverters, Log logger) {
|
||||
Assert.notNull(responseType, "'responseType' must not be null");
|
||||
Assert.notEmpty(messageConverters, "'messageConverters' must not be empty");
|
||||
this.responseType = responseType;
|
||||
this.messageConverters = messageConverters;
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
|
@ -57,6 +67,10 @@ public class HttpMessageConverterExtractor<T> implements ResponseExtractor<T> {
|
|||
}
|
||||
for (HttpMessageConverter messageConverter : messageConverters) {
|
||||
if (messageConverter.canRead(responseType, contentType)) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Reading [" + responseType.getName() + "] as \"" + contentType
|
||||
+"\" using [" + messageConverter + "]");
|
||||
}
|
||||
return (T) messageConverter.read(this.responseType, response);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -188,21 +188,21 @@ public class RestTemplate extends HttpAccessor implements RestOperations {
|
|||
public <T> T getForObject(String url, Class<T> responseType, Object... urlVariables) throws RestClientException {
|
||||
AcceptHeaderRequestCallback requestCallback = new AcceptHeaderRequestCallback(responseType);
|
||||
HttpMessageConverterExtractor<T> responseExtractor =
|
||||
new HttpMessageConverterExtractor<T>(responseType, getMessageConverters());
|
||||
new HttpMessageConverterExtractor<T>(responseType, getMessageConverters(), logger);
|
||||
return execute(url, HttpMethod.GET, requestCallback, responseExtractor, urlVariables);
|
||||
}
|
||||
|
||||
public <T> T getForObject(String url, Class<T> responseType, Map<String, ?> urlVariables) throws RestClientException {
|
||||
AcceptHeaderRequestCallback requestCallback = new AcceptHeaderRequestCallback(responseType);
|
||||
HttpMessageConverterExtractor<T> responseExtractor =
|
||||
new HttpMessageConverterExtractor<T>(responseType, getMessageConverters());
|
||||
new HttpMessageConverterExtractor<T>(responseType, getMessageConverters(), logger);
|
||||
return execute(url, HttpMethod.GET, requestCallback, responseExtractor, urlVariables);
|
||||
}
|
||||
|
||||
public <T> T getForObject(URI url, Class<T> responseType) throws RestClientException {
|
||||
AcceptHeaderRequestCallback requestCallback = new AcceptHeaderRequestCallback(responseType);
|
||||
HttpMessageConverterExtractor<T> responseExtractor =
|
||||
new HttpMessageConverterExtractor<T>(responseType, getMessageConverters());
|
||||
new HttpMessageConverterExtractor<T>(responseType, getMessageConverters(), logger);
|
||||
return execute(url, HttpMethod.GET, requestCallback, responseExtractor);
|
||||
}
|
||||
|
||||
|
|
@ -268,7 +268,7 @@ public class RestTemplate extends HttpAccessor implements RestOperations {
|
|||
throws RestClientException {
|
||||
HttpEntityRequestCallback requestCallback = new HttpEntityRequestCallback(request, responseType);
|
||||
HttpMessageConverterExtractor<T> responseExtractor =
|
||||
new HttpMessageConverterExtractor<T>(responseType, getMessageConverters());
|
||||
new HttpMessageConverterExtractor<T>(responseType, getMessageConverters(), logger);
|
||||
return execute(url, HttpMethod.POST, requestCallback, responseExtractor, uriVariables);
|
||||
}
|
||||
|
||||
|
|
@ -276,7 +276,7 @@ public class RestTemplate extends HttpAccessor implements RestOperations {
|
|||
throws RestClientException {
|
||||
HttpEntityRequestCallback requestCallback = new HttpEntityRequestCallback(request, responseType);
|
||||
HttpMessageConverterExtractor<T> responseExtractor =
|
||||
new HttpMessageConverterExtractor<T>(responseType, getMessageConverters());
|
||||
new HttpMessageConverterExtractor<T>(responseType, getMessageConverters(), logger);
|
||||
return execute(url, HttpMethod.POST, requestCallback, responseExtractor, uriVariables);
|
||||
}
|
||||
|
||||
|
|
@ -509,6 +509,9 @@ public class RestTemplate extends HttpAccessor implements RestOperations {
|
|||
}
|
||||
if (!allSupportedMediaTypes.isEmpty()) {
|
||||
MediaType.sortBySpecificity(allSupportedMediaTypes);
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Setting request Accept header to " + allSupportedMediaTypes);
|
||||
}
|
||||
request.getHeaders().setAccept(allSupportedMediaTypes);
|
||||
}
|
||||
}
|
||||
|
|
@ -565,6 +568,16 @@ public class RestTemplate extends HttpAccessor implements RestOperations {
|
|||
if (!requestHeaders.isEmpty()) {
|
||||
httpRequest.getHeaders().putAll(requestHeaders);
|
||||
}
|
||||
if (logger.isDebugEnabled()) {
|
||||
if (requestContentType != null) {
|
||||
logger.debug("Writing [" + requestBody + "] as \"" + requestContentType +
|
||||
"\" using [" + messageConverter + "]");
|
||||
}
|
||||
else {
|
||||
logger.debug("Writing [" + requestBody + "] using [" + messageConverter + "]");
|
||||
}
|
||||
|
||||
}
|
||||
messageConverter.write(requestBody, requestContentType, httpRequest);
|
||||
return;
|
||||
}
|
||||
|
|
@ -588,7 +601,7 @@ public class RestTemplate extends HttpAccessor implements RestOperations {
|
|||
|
||||
public HttpEntityResponseExtractor(Class<T> responseType) {
|
||||
if (responseType != null) {
|
||||
this.delegate = new HttpMessageConverterExtractor<T>(responseType, getMessageConverters());
|
||||
this.delegate = new HttpMessageConverterExtractor<T>(responseType, getMessageConverters(), logger);
|
||||
} else {
|
||||
this.delegate = null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -192,6 +192,7 @@ public class RestTemplateIntegrationTests {
|
|||
public void exchangePost() throws Exception {
|
||||
HttpHeaders requestHeaders = new HttpHeaders();
|
||||
requestHeaders.set("MyHeader", "MyValue");
|
||||
requestHeaders.setContentType(MediaType.TEXT_PLAIN);
|
||||
HttpEntity<String> requestEntity = new HttpEntity<String>(helloWorld, requestHeaders);
|
||||
HttpEntity<?> result = template.exchange(URI + "/{method}", HttpMethod.POST, requestEntity, null, "post");
|
||||
assertEquals("Invalid location", new URI(URI + "/post/1"), result.getHeaders().getLocation());
|
||||
|
|
|
|||
Loading…
Reference in New Issue