ホームページ >Java >&#&チュートリアル >Spring RestTemplate を使用してリクエストとレスポンスの徹底的なデバッグ ログを有効にする方法

Spring RestTemplate を使用してリクエストとレスポンスの徹底的なデバッグ ログを有効にする方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-23 02:43:14284ブラウズ

How to Enable Exhaustive Debugging Logging for Requests and Responses using Spring RestTemplate?

Spring RestTemplate を使用してリクエストとレスポンスの徹底的なデバッグ ログを有効にする方法

問題

Spring RestTemplate を使用する場合、HTTP リクエストとレスポンスのデバッグが困難になる場合がある詳細なログ情報が欠けているためです。 Curl の冗長モードと同様に、ヘッダーや Cookie など、送受信されたデータの両方についての洞察が必要な場合があります。

ソリューション

RestTemplate ソース コードを変更する代わりに、カスタム ClientHttpRequestInterceptor を使用して、リクエストとレスポンスのデータを傍受してログに記録します。完全な例を次に示します。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;

public class LoggingRequestInterceptor implements ClientHttpRequestInterceptor {

    final static Logger log = LoggerFactory.getLogger(LoggingRequestInterceptor.class);

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
        traceRequest(request, body);
        ClientHttpResponse response = execution.execute(request, body);
        traceResponse(response);
        return response;
    }

    private void traceRequest(HttpRequest request, byte[] body) throws IOException {
        log.info("===========================request begin================================================");
        log.debug("URI         : {}", request.getURI());
        log.debug("Method      : {}", request.getMethod());
        log.debug("Headers     : {}", request.getHeaders() );
        log.debug("Request body: {}", new String(body, "UTF-8"));
        log.info("==========================request end================================================");
    }

    private void traceResponse(ClientHttpResponse response) throws IOException {
        StringBuilder inputStringBuilder = new StringBuilder();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(response.getBody(), "UTF-8"));
        String line = bufferedReader.readLine();
        while (line != null) {
            inputStringBuilder.append(line);
            inputStringBuilder.append('\n');
            line = bufferedReader.readLine();
        }
        log.info("============================response begin==========================================");
        log.debug("Status code  : {}", response.getStatusCode());
        log.debug("Status text  : {}", response.getStatusText());
        log.debug("Headers      : {}", response.getHeaders());
        log.debug("Response body: {}", inputStringBuilder.toString());
        log.info("=======================response end=================================================");
    }

}

このインターセプタを使用するには、BufferingClientHttpRequestFactory を使用して RestTemplate をインスタンス化し、LoggingRequestInterceptor を登録します。

RestTemplate restTemplate = new RestTemplate(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()));
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
interceptors.add(new LoggingRequestInterceptor());
restTemplate.setInterceptors(interceptors);

このソリューションは、キャプチャおよびキャプチャを行うためのカスタマイズ可能で便利な方法を提供します。リクエストとレスポンスの詳細をログに記録し、RESTful なトラブルシューティングとデバッグに役立ちますSpring RestTemplate を使用した Web サービス通信。

以上がSpring RestTemplate を使用してリクエストとレスポンスの徹底的なデバッグ ログを有効にする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。