最近使用restTemplate调第三方接口返回中文出现乱码
双方均已约定使用utf-8编码格式,但返回接口中文乱码,在排查过程中发现restTemplate默认的是ISO-8859-1编码,因此需要将编码格式改为utf-8,修改如下 :
添加:
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
package com.igen.sorting.icbc.config;import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContextBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;import java.nio.charset.StandardCharsets;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;@Configuration
public class RestConfig {@Beanpublic RestTemplate buildRestTemplate(List<RequestHeaderInterceptor> interceptors) throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {HttpComponentsClientHttpRequestFactory factory = newHttpComponentsClientHttpRequestFactory();
// factory.setConnectionRequestTimeout(requestTimeout);
// factory.setConnectTimeout(connectTimeout);
// factory.setReadTimeout(readTimeout);// httpsSSLContextBuilder builder = new SSLContextBuilder();builder.loadTrustMaterial(null, (X509Certificate[] x509Certificates, String s) -> true);SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(builder.build(), new String[]{"SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE);Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", new PlainConnectionSocketFactory()).register("https", socketFactory).build();PoolingHttpClientConnectionManager phccm = new PoolingHttpClientConnectionManager(registry);phccm.setMaxTotal(200);CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).setConnectionManager(phccm).setConnectionManagerShared(true).build();factory.setHttpClient(httpClient);RestTemplate restTemplate = new RestTemplate(factory);List<ClientHttpRequestInterceptor> clientInterceptorList = new ArrayList<>();for (RequestHeaderInterceptor i : interceptors) {ClientHttpRequestInterceptor interceptor = i;clientInterceptorList.add(interceptor);}restTemplate.setInterceptors(clientInterceptorList);restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));return restTemplate;}
}
希望能帮到同样遇到该问题的同学