Maison > Java > javaDidacticiel > le corps du texte

Comment activer la journalisation exhaustive du débogage pour les demandes et les réponses à l'aide de Spring RestTemplate ?

Mary-Kate Olsen
Libérer: 2024-11-23 02:43:14
original
205 Les gens l'ont consulté

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

Comment activer la journalisation exhaustive du débogage pour les requêtes et les réponses à l'aide de Spring RestTemplate

Problème

Le débogage des requêtes et des réponses HTTP peut être difficile lors de l'utilisation de Spring RestTemplate , car il manque d'informations de journalisation détaillées. Semblable au mode détaillé de curl, vous pouvez avoir besoin d'informations sur les données envoyées et reçues, y compris les en-têtes et les cookies.

Solution

Au lieu de modifier le code source RestTemplate, vous pouvez utiliser un ClientHttpRequestInterceptor personnalisé pour intercepter et enregistrer les données de demande et de réponse. Voici un exemple complet :

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=================================================");
    }

}
Copier après la connexion

Pour utiliser cet intercepteur, instanciez un RestTemplate à l'aide d'un BufferingClientHttpRequestFactory et enregistrez le LoggingRequestInterceptor :

RestTemplate restTemplate = new RestTemplate(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()));
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
interceptors.add(new LoggingRequestInterceptor());
restTemplate.setInterceptors(interceptors);
Copier après la connexion

Cette solution fournit un moyen personnalisable et pratique de capturer et journaliser les détails de la demande et de la réponse, facilitant le dépannage et le débogage de la communication du service Web RESTful à l'aide de Spring RestTemplate.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal