我有一个问题,当服务器响应时,我无法将json格式的数据转换为UTF-8。我已经在spring配置xml中设置了MediaType,但是似乎不起作用。这是我的服务器端代码来响应:

    @RequestMapping(value = "/post",  method = RequestMethod.POST)
    public @ResponseBody String postData(@RequestBody ObjectNode request){
        // do something with request
        return response;
    }


当服务器响应时,json格式的数据将包含unicode值。并在客户端配置中:

    <bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
      <property name="messageConverters">
        <list>
            <bean id="formConverter" class="org.springframework.http.converter.FormHttpMessageConverter" />
            <bean id="stringConverter" class="org.springframework.http.converter.StringHttpMessageConverter" />
            <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >
                <property name="supportedMediaTypes">
                      <list>
                        <bean class="org.springframework.http.MediaType">
                           <constructor-arg value="application" />
                           <constructor-arg value="json" />
                           <constructor-arg value="#{T(java.nio.charset.Charset).forName('UTF-8')}"/>
                         </bean>
                      </list>
                </property>
            </bean>
        </list>
      </property>
    </bean>


这是我的客户端代码以请求数据,并且我使用postForObject方法:

    @Autowired
    private RestTemplate restTemplate;

    public ObjectNode postObjectNode(ObjectNode request){
          ObjectNode node = restTemplate.postForObject("http://localhost:8080/server/post", request, ObjectNode.class);
          return node;
}


结果,包含Unicode的数据将转换为????。是由服务器引起的还是由restTemplate客户端引起的。请帮我。提前致谢...

最佳答案

如果处理程序方法为String返回@ResponseBody类型,则默认消息转换器为StringHttpMessageConverter,则可以这样配置转换器

    <mvc:annotation-driven >
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <property name="supportedMediaTypes">
                <list>
                    <value>text/plain;charset=UTF-8</value>
                </list>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

关于java - 如何在json格式的restTemplate中将MediaType设置为UTF-8,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18236975/

10-11 22:51