SpringBoot RestTemplate 请求工具类

SpringBoot RestTemplate 请求工具类

  • Naotu
    • 请求日志拦截器
    • 创建 单例 RestTemplate
    • 工具类
    • 测试
    • 测试日志

Naotu

请求日志拦截器

@Slf4j
public class HttpLoggingInterceptor implements ClientHttpRequestInterceptor {

    private static final String REQ_BEG = "=========================== req beg >>>>>>>>>>>>>>>>>>>>>>>>>>";
    private static final String REQ_END = "=========================== req end <<<<<<<<<<<<<<<<<<<<<<<<<<";
    private static final String RES_BEG = "=========================== res beg >>>>>>>>>>>>>>>>>>>>>>>>>>";
    private static final String RES_END = "=========================== res end <<<<<<<<<<<<<<<<<<<<<<<<<<";

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {

        logRequest(request, body);
        ClientHttpResponse response = null;
        try {
            response = execution.execute(request, body);
        } catch (SocketTimeoutException e) {
            // throw new BusinessException(EnumResult.CODE_800004, "数据请求超时");
        }

        logResponse(response);

        return response;
    }

    private void logRequest(HttpRequest request, byte[] body) throws IOException {

        if (log.isInfoEnabled()) {
            log.info(REQ_BEG);
            log.info("URI         : {}", request.getURI());
            log.info("Method      : {}", request.getMethod());
            log.info("Headers     : {}", request.getHeaders());
            log.info("Request body: {}", new String(body, "UTF-8"));
            log.info(REQ_END);
        }
    }

    private void logResponse(ClientHttpResponse response) throws IOException {

        if (log.isInfoEnabled()) {
            log.info(RES_BEG);
            log.info("Status code  : {}", response.getStatusCode());
            log.info("Status text  : {}", response.getStatusText());
            log.info("Headers      : {}", response.getHeaders());
            log.info("Response body: {}", StreamUtils.copyToString(response.getBody(), Charset.defaultCharset()));
            log.info(RES_END);
        }
    }
}

创建 单例 RestTemplate

@Getter
public enum RestEnum {
    /**
     * RestTemplate 单例
     */
    SINGLE_INSTANCE;
    private RestTemplate restTemplate;
    RestEnum() {
        // 设置超时
        restTemplate = new RestTemplateBuilder()
                .setConnectTimeout(Duration.ofMillis(5000))
                .setReadTimeout(Duration.ofMillis(5000))
                .build();

        // 设置日志拦截
        ClientHttpRequestInterceptor ri = new HttpLoggingInterceptor();
        List<ClientHttpRequestInterceptor> ris = new ArrayList<>();
        ris.add(ri);
        restTemplate.setInterceptors(ris);
        restTemplate.setRequestFactory(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()));
    }
}

工具类

public class RestClient {
    public static String postJson(String reqUrl, String reqJsonStrParam) {
        //设置 Header
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
        //设置参数
        HttpEntity<String> requestEntity = new HttpEntity<>(reqJsonStrParam, httpHeaders);
        //执行请求
        ResponseEntity<String> resp = RestEnum.SINGLE_INSTANCE.getRestTemplate()
                .exchange(reqUrl, HttpMethod.POST, requestEntity, String.class);
        //返回请求返回值
        return resp.getBody();
    }
    public static String postForm(String reqUrl, String reqFormPara) {
        //设置 Header
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        //设置参数
        HttpEntity<String> requestEntity = new HttpEntity<>(reqFormPara, httpHeaders);
        //执行请求
        ResponseEntity<String> resp = RestEnum.SINGLE_INSTANCE.getRestTemplate()
                .exchange(reqUrl, HttpMethod.POST, requestEntity, String.class);
        //返回请求返回值
        return resp.getBody();
    }
}

测试

String jsonStr = "{\"name\":\"BeJson\",\"url\"}";
RestClient.postJson("http://www.baidu.com", jsonStr);

测试日志

你可能感兴趣的:(SpringBoot RestTemplate 请求工具类)