- RestTemplate与HttpClient结合,及解决RestTemplate乱码问题

时间:2025-03-12 07:26:28
package com.hmy.azure.config; import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; import org.apache.hc.client5.http.impl.classic.HttpClients; import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder; import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; import org.apache.hc.core5.ssl.SSLContexts; import org.apache.hc.core5.ssl.TrustStrategy; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.web.client.RestTemplate; import javax.net.ssl.SSLContext; import java.nio.charset.StandardCharsets; import java.security.KeyManagementException; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.util.List; @Configuration public class RestTemplateConfig{ private CloseableHttpClient httpClient; public RestTemplate getRestTemplate(){ RestTemplate restTemplate = new RestTemplate(getRequestFactory()); //设置字符集 setCharset(restTemplate); return restTemplate; } //设置字符集为UTF-8, 解决乱码问题 private void setCharset(RestTemplate restTemplate) { List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters(); for(HttpMessageConverter messageConverter:messageConverters){ if(messageConverter instanceof StringHttpMessageConverter){ ((StringHttpMessageConverter) messageConverter).setDefaultCharset(StandardCharsets.UTF_8); } } } //配置SSL, 使用RestTemplate访问https public HttpComponentsClientHttpRequestFactory getRequestFactory(){ TrustStrategy trustStrategy = (x509Certificates, s) -> true; try { SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null,trustStrategy).build(); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext); this.httpClient = HttpClients.custom().setConnectionManager(PoolingHttpClientConnectionManagerBuilder .create().setSSLSocketFactory(socketFactory).build()).build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient(this.httpClient); requestFactory.setConnectionRequestTimeout(5000); requestFactory.setConnectTimeout(10000); return requestFactory; } catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) { throw new RuntimeException(e); } } }