/* * 初始化RestTemplate,RestTemplate會默認添加HttpMessageConverter * 添加的StringHttpMessageConverter非UTF-8 所以先要移除原有的StringHttpMessageConverter, * 再添加一個字符集為UTF-8的StringHttpMessageConvert */ private void reInitMessageConverter(RestTemplate restTemplate) { List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters(); HttpMessageConverter<?> converterTarget = null; for (HttpMessageConverter<?> item : converterList) { if (item.getClass() == StringHttpMessageConverter.class) { converterTarget = item; break; } } if (converterTarget != null) { converterList.remove(converterTarget); } HttpMessageConverter<?> converter = new StringHttpMessageConverter(StandardCharsets.UTF_8); converterList.add(converter); }
RestTemplate 中文亂碼解決方法
標簽: resttemplate 中文亂碼 方法 | 發表時間:2016-02-01 15:51 | 作者:yangzelin_job09
出處:http://www.iteye.com
Spring4.2.2.RELEASE RestTemplate 中文亂碼解決方法
RestTempalate 字符串類型默認StringHttpMessageConverter做轉碼,而StringHttpMessageConverter的默認編碼集是ISO8859-1,本工程編碼是UTF-8 故發送到服務器端會存在中文亂碼
第一種:把restTempalate 中 StringHttpMessageConverter 默認編碼設置為UTF-8
具體:使用 restTempalate 構造函數 public RestTemplate(List<HttpMessageConverter<?>> messageConverters) 傳入 StringHttpMessageConverter 默認編碼集是UTF-8 的轉換器
在 配置文件中配置:
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> <constructor-arg index="0"> <list> <bean id="byteArrayHttpMessageConverter" class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean> <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8"></constructor-arg> </bean> <bean id="resourceHttpMessageConverter" class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean> <bean id="sourceHttpMessageConverter" class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean> <bean id="allEncompassingFormHttpMessageConverter" class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter"></bean> <bean id="jaxb2RootElementHttpMessageConverter" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean> <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean> </list> </constructor-arg> </bean>
第二種:使用 設置Http請求頭中設置 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 修改默認編碼
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/x-www-form-urlencoded; charset=UTF-8"); headers.setContentType(type); System.out.println(type); HttpEntity<String> requestEntity = new HttpEntity<String>(PostStrUtils.getPostStrFromMap(paramMap), headers); String msg = restTemplate.postForObject(url,requestEntity, String.class);
public String sendToRest(String url, Map<String, String> paramMap) { logger.debug("====================start======================"); logger.debug("調用接口-" + restUrl + url + " 入參:" + paramMap); /** * restTempalate 字符串類型默認StringHttpMessageConverter做轉碼,而StringHttpMessageConverter的默認編碼集是ISO8859-1,本工程編碼是UTF-8 故發送到服務器端會存在中文亂碼 * 解決方法有兩種: * 第一種:把restTempalate 中 StringHttpMessageConverter 默認編碼設置為UTF-8 * 具體:使用 restTempalate 構造函數 public RestTemplate(List<HttpMessageConverter<?>> messageConverters) 傳入 StringHttpMessageConverter 默認編碼集是UTF-8 的轉換器 * 在 配置文件中配置: * <bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> * <constructor-arg index="0"> * <list> * <bean id="byteArrayHttpMessageConverter" class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean> * <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"> * <constructor-arg value="UTF-8"></constructor-arg> * </bean> * <bean id="resourceHttpMessageConverter" class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean> * <bean id="sourceHttpMessageConverter" class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean> * <bean id="allEncompassingFormHttpMessageConverter" class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter"></bean> * <bean id="jaxb2RootElementHttpMessageConverter" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean> * <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean> * </list> * </constructor-arg> * </bean> * * * 第二種:使用 設置Http請求頭中設置 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 修改默認編碼 * */ //存在中文亂問題 // String msg = restTemplate.postForObject(restUrl + url, // PostStrUtils.getPostStrFromMap(paramMap), String.class); // HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/x-www-form-urlencoded; charset=UTF-8"); headers.setContentType(type); System.out.println(type); HttpEntity<String> requestEntity = new HttpEntity<String>(PostStrUtils.getPostStrFromMap(paramMap), headers); String msg = restTemplate.postForObject(url,requestEntity, String.class); logger.debug("調用接口-" + restUrl + url + " 返回:" + msg); logger.debug("====================end========================"); return msg; }