Das Debuggen von Spring RestTemplate-Anfragen und -Antworten kann eine verwirrende Aufgabe sein. In diesem Artikel wird eine effektive Lösung zur Bewältigung dieser Herausforderung untersucht und ein umfassender Ansatz zur Ermöglichung vollständiger Protokollierungs- und Debugging-Funktionen bereitgestellt.
Im Gegensatz zur Verwendung von Curl mit dem „verbose“ Option bietet das Spring RestTemplate oft nur begrenzte Einblicke in Anfrage- und Antwortdetails. Dieser Mangel an Sichtbarkeit behindert ein effizientes Debugging und Fehlerbehebung.
Um dieses Problem zu beheben, bieten Spring Web Client und RestTemplate die Schnittstelle ClientHttpRequestInterceptor an. Durch die Implementierung dieser Schnittstelle können Entwickler das Verhalten der RestTemplate-Instanz anpassen, einschließlich der Möglichkeit, sowohl ausgehende Anfragen als auch eingehende Antworten zu verfolgen.
Um den ClientHttpRequestInterceptor zu implementieren, beachten Sie Folgendes Beispiel:
import org.springframework.http.HttpRequest; import org.springframework.http.client.ClientHttpRequestExecution; import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.ClientHttpResponse; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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================================================="); } }
Um den Interceptor zu nutzen, instanziieren Sie das RestTemplate mithilfe einer BufferingClientHttpRequestFactory und registrieren Sie den LoggingRequestInterceptor wie folgt:
RestTemplate restTemplate = new RestTemplate(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory())); List<ClientHttpRequestInterceptor> interceptors = new ArrayList<>(); interceptors.add(new LoggingRequestInterceptor()); restTemplate.setInterceptors(interceptors);
Die BufferingClientHttpRequestFactory ist erforderlich, um mehrere Lesungen des Antworttextes zu ermöglichen.
Durch die Implementierung des ClientHttpRequestInterceptor können Sie die Debugging-Funktionen von Spring RestTemplate verbessern. Das in diesem Artikel bereitgestellte Beispiel zeigt, wie sowohl Anfragen als auch Antworten nachverfolgt werden können, und bietet umfassende Einblicke in den Kommunikationsprozess. Dieser Ansatz vereinfacht die Fehlerbehebung und verbessert die Effizienz von Entwicklungs- und Wartungsaufgaben.
Das obige ist der detaillierte Inhalt vonSo verfolgen Sie Spring RestTemplate-Anfragen und -Antworten: Eine umfassende Anleitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!