2017-03-20 11 views
0

アプリケーションでロギング目的でREST要求と応答のボディを取得したいと思います。Spring ClientHttpRequestInterceptorリクエスト/レスポンスが空です

現在、私はClientHttpRequestInterceptorを実装しているloggingRequestInterceptorクラスを持っています。これはsofiene hereの答えとよく似ています。

私はこのインターセプタを私のスプリングテンプレート内のレストテンプレート内のプロパティとして追加しました。私の残りのすべては、私が法とURIが、身体およびログ呼び出すには、

<property name="interceptors"> 
     <list> 
      <bean class="com.company.projectName.service.api.rest.io.impl.LoggingRequestInterceptor" />      
     </list> 
    </property> 

しかし:私のRestTemplateに

public class LoggingRequestInterceptor implements ClientHttpRequestInterceptor { 

private static final Logger logger = LoggerFactory.getLogger(LoggingRequestInterceptor.class); 
@Override 
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { 

    ClientHttpResponse response = execution.execute(request, body); 

    response = log(request, body, response); 

    return response; 
} 

private ClientHttpResponse log(final HttpRequest request, final byte[] body, final ClientHttpResponse response) throws IOException { 
    final ClientHttpResponse responseCopy = new BufferingClientHttpResponseWrapper(response); 
    StringBuilder builder = new StringBuilder(); 
    builder.append("Method: ").append(request.getMethod().toString()); 
    builder.append("URI: ").append(request.getURI().toString()); 
    builder.append("Request Body: ").append(new String(body,"UTF-8")); 
    builder.append("Response body: ").append(convertStreamToString(responseCopy.getBody())); 
    logger.info(builder.toString()); 
    return responseCopy; 
    } 
} 

春のプロパティ:

私のコードを以下に示します。レスポンスボディは空です。アプリケーションがこの情報を記録できるようにするために、要求と応答から本文を取得する適切な方法は何ですか。

答えて

1

解決方法:最初は、GETメソッドであるため、リクエスト本文は空白でした。第2に、私は204のステータスを受け取っていたのでResponseStatusCodeを記録する必要がありました。これはNo Contentであり、結果として空の応答本体になりました。

関連する問題