> Java > java지도 시간 > 본문

Spring RestTemplate을 사용하여 요청 및 응답에 대한 철저한 디버깅 로깅을 활성화하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-23 02:43:14
원래의
225명이 탐색했습니다.

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

Spring RestTemplate을 사용하여 요청 및 응답에 대한 철저한 디버깅 로깅을 활성화하는 방법

문제

Spring RestTemplate을 사용할 때 HTTP 요청 및 응답 디버깅이 어려울 수 있습니다. , 자세한 로깅 정보가 부족하기 때문입니다. 컬의 장황한 모드와 마찬가지로 헤더와 쿠키를 포함하여 전송 및 수신된 데이터 모두에 대한 통찰력이 필요할 수 있습니다.

해결책

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);
로그인 후 복사

이 솔루션은 사용자 정의 가능하고 편리한 캡처 및 캡처 방법을 제공합니다. 요청 및 응답 세부 정보를 기록하여 Spring을 사용하여 RESTful 웹 서비스 통신 문제 해결 및 디버깅을 지원합니다. RestTemplate.

위 내용은 Spring RestTemplate을 사용하여 요청 및 응답에 대한 철저한 디버깅 로깅을 활성화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿