欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot RestTemplate請求日志打印方式

 更新時間:2023年07月07日 09:41:00   作者:Yweir  
這篇文章主要介紹了SpringBoot RestTemplate請求日志打印方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

SpringBoot RestTemplate請求日志打印

RestTemplateConfig 配置

@Configuration
public class RestTemplateConfig {
    /**
     * 初始化連接工廠
     * @return
     */
    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        /**連接超時*/
        factory.setConnectTimeout(15000);
        /**讀超時*/
        factory.setReadTimeout(5000);
        return factory;
    }
    /**
     * 初始化請求模板
     * @param simpleClientHttpRequestFactory
     * @return
     */
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory simpleClientHttpRequestFactory,@Qualifier("loggingRequestInterceptor") LoggingRequestInterceptor loggingRequestInterceptor){
        RestTemplate restTemplate = new RestTemplate(new BufferingClientHttpRequestFactory(simpleClientHttpRequestFactory));
        List<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
        interceptors.add(loggingRequestInterceptor);
        restTemplate.setInterceptors(interceptors);
        return restTemplate;
    }
    /**
     * 返回請求工具類
     * @param restTemplate
     * @return
     */
    @Bean
    public HttpRequestUtils getHttpRequestUtils(RestTemplate restTemplate){
        HttpRequestUtils httpRequestUtils = new HttpRequestUtils();
        httpRequestUtils.setRestTemplate(restTemplate);
        return httpRequestUtils;
    }
}

HttpUtils 工具類

public class HttpUtils {
    private RestTemplate restTemplate;
    public void setRestTemplate(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }
    /**
     * @param : url
     * @description: post請求 get
     */
    public String sendGetRequest(String url) throws IOException {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity httpEntity = new HttpEntity(headers);//請求體,包括請求數(shù)據(jù) body 和 請求頭 headers
        ResponseEntity<String> strbody = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class);
        return strbody.getBody();
    }
    /**
     * @param : url
     * @param : data
     * @description: post請求 json
     */
    public String sendPostRequest(String url, JSONObject data) throws IOException {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity httpEntity = new HttpEntity(data, headers);//請求體,包括請求數(shù)據(jù) body 和 請求頭 headers
        ResponseEntity<String> strbody = restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
        return strbody.getBody();
    }
    /**
     * @param : url
     * @param : data
     * @description: post請求 json
     */
    public String sendPostRequest(String url, String data) throws IOException {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity httpEntity = new HttpEntity(data, headers);//請求體,包括請求數(shù)據(jù) body 和 請求頭 headers
        ResponseEntity<String> strbody = restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
        return strbody.getBody();
    }
}

LoggingRequestInterceptor 攔截類

@Component("loggingRequestInterceptor")
public class LoggingRequestInterceptor implements ClientHttpRequestInterceptor {
     Logger log = LoggerFactory.getLogger(getClass());
    @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.debug("===========================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.debug("==========================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.debug("============================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.debug("=======================response end=================================================");
    }
}

關(guān)于springboot restTemplate傳文件爬坑

關(guān)于restTemplate post請求中包含文件類型 

public void test5(){
? ? MultiValueMap param = new LinkedMultiValueMap();
? ? FileSystemResource ?file = new FileSystemResource("C:\\Users\\Ryan\\Postman\\files\\zm.png");
? ? param .add("image",file);
? ? ResponseEntity<String> idCardOcrRes = this.restTemplateForFile(idCardOCRUrl,param,String.class);
? ? String idCardOcrResBody = idCardOcrRes.getBody();
? ? System.out.println(idCardOcrResBody);
}
private <T> ResponseEntity<T> restTemplateForFile(String url, MultiValueMap<String,Object> map, Class<T> responseClass){
? ? //設(shè)置請求頭
? ? HttpHeaders headers = new HttpHeaders();
? ? MediaType mediaType = MediaType.parseMediaType("multipart/form-data");
? ? headers.setContentType(mediaType);
? ? //請求體為入?yún)ap
? ? //用httpEntity封裝整個請求報文
? ? HttpEntity<MultiValueMap<String,Object>> entity = new HttpEntity(map,headers);
? ? ResponseEntity<T> responseEntity = restTemplate.postForEntity(url, entity, responseClass);
? ? return responseEntity;
}

注意使用FileSystemResource類型的文件即可。

本人在過程中遇到過一個問題,在此記錄下來,param為MultiValueMap

logger.info("param:{},userNo:{},incomingNo:{}",JSONObject.toJSONString(param),userNo,incomingNo);

若加入此日志輸出,會清空新建的文件,這個問題困擾好久!?。?/p>

關(guān)于restTemplate 響應(yīng)狀態(tài)碼捕捉

捕捉  RestClientResponseException e 類型異常,

int statis = e.getRawStatusCode();
String responseBodyAsString = e.getResponseBodyAsString();

可以得到具體的響應(yīng)消息以及響應(yīng)狀態(tài)碼

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論