RestTemplate中文乱码问题(spring-web3.0.7版本)


从网上找的方法:

方法一:

        //resttemplate乱码问题
        //3.1.X以上版本使用
//        restTemplate.getMessageConverters().add(0, StringHttpMessageConverter.DEFAULT_CHARSET);
//        3.0版本
        List<HttpMessageConverter<?>> converterList=restTemplate.getMessageConverters();
        HttpMessageConverter<?> converter = new StringHttpMessageConverter();
        converterList.add(0, converter);
        restTemplate.setMessageConverters(converterList);


        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
        headers.setContentType(type);
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());

参考:

  https://blog.csdn.net/kinbridge/article/details/73477731

方法二:

  xml配置

    <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://yangzelin-job09.iteye.com/blog/2275367

方法三:

  xml配置

 <bean id="ky.requestFactory" class="org.springframework.http.client.SimpleClientHttpRequestFactory">
        <property name="readTimeout" value="10000"/>
        <property name="connectTimeout" value="5000"/>
    </bean>

    <bean id="simpleRestTemplate" class="org.springframework.web.client.RestTemplate">
        <constructor-arg ref="ky.requestFactory"/>
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
                <bean class="org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter"/>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/plain;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
            </list>
        </property>
    </bean>

参考:

  https://blog.csdn.net/qq_32193151/article/details/72902898

以上都试过,可能使我们spring的版本太低,具体也不大清楚,还出现乱码问题,有时候最简单的也是最有效的,我直接用new String()的方式,解决了!!!

终极解决方法:

  查看spring源码中org.springframework.http.converter.StringHttpMessageConverter类中,默认编码格式为默认为ISO-8859-1。

  在java代码中直接转换。

//restTemplate默认为iso8859-1,需要转换编码格式
        try {
            body = new String(body.getBytes("iso8859-1"),"utf-8");
        } catch (UnsupportedEncodingException e1) {
            log.error("iso8859-1编码格式转换utf-8错误");
            e1.printStackTrace();
        }

原来的:鞋æ乱码解决

原文地址:https://www.cnblogs.com/soul-wonder/p/9072544.html