栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring RestTemplate

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring 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 pre  : {}", response.getStatusCode());        log.debug("Status text  : {}", response.getStatusText());        log.debug("Headers      : {}", response.getHeaders());        log.debug("Response body: {}", inputStringBuilder.toString());        log.info("=======================response end=================================================");    }}

然后

RestTemplate
使用
BufferingClientHttpRequestFactory
和实例化
LoggingRequestInterceptor

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

BufferingClientHttpRequestFactory因为我们要在拦截器和初始调用代码中都使用响应主体,所以这是必需的。默认实现只允许读取一次响应主体。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/364024.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号