spring resttemplate中的轉碼


    /*
     * 初始化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;  }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM