Spring MVC 4.3.3中的Responsebody编码

时间:2016-10-18 02:39:24

标签: spring spring-mvc

要在spring-webmvc中设置@responsebody编码,我曾在配置文件中添加以下行:

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

这会覆盖默认的charset responsebody处理程序使用。它适用于spring-mvc版本4.2.7及更低版本。

但是,在最新版本的spring-webmvc(4.3.3)中,此方法不起作用。在新版本中,StringHttpMessageConverter从响应头读取内容类型,如果content-type字符串包含charset信息,则它使用此charset并忽略它的默认字符集。

我知道我可以写这样来解决这个问题:

@RequestMapping(value = "/getDealers", method = RequestMethod.GET, 
produces = "application/json; charset=utf-8")
@ResponseBody
public String sendMobileData() {

}

但我必须在每个方法或每个控制器上编写它。 有没有办法像我之前那样全局设置响应体编码?

1 个答案:

答案 0 :(得分:3)

我发现我的配置中没有添加<value>application/json;charset=UTF-8</value>。我不知道为什么我的旧配置适用于4.2.7及更低版本,但这个新配置只适用于4.3.3版本:

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