如何检查我的请求 - 响应是否已编码?

时间:2012-03-27 14:27:48

标签: java spring-mvc character-encoding

这可能是一个显而易见的问题。但我之前没有遇到过这种情况。 在我的Spring MVC应用程序中,我在web.xml中有以下配置。

<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>


<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

浏览器和服务器之间的数据传输通过JSON使用Jackson Mapper进行。 Firebug中的请求 - 响应标头如下:

Response headers
Content-Type    application/json;charset=UTF-8
Server          Apache
Transfer-Encoding   chunked

Request Headers
Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Cache-Control   no-cache
Connection  keep-alive
Content-Length  0
Content-Type    application/json; charset=utf-8

这是否意味着请求 - 响应被正确编码? 查看标题是确定所用编码的唯一方法吗?

更新

如果正如Polve在下面提到的那样,这些设置只会将解释影响为UTF-8,那么我应该在Spring MVC中对我的响应进行编码?

2 个答案:

答案 0 :(得分:2)

CharacterEncodingFilter仅设置您希望另一方将响应(或请求)解释为的编码。

请求并未表示您希望通过Accept-Charset获得UTF-8,因此客户端可以发送他想要的任何内容,并且您的过滤器会说您将解释它为utf-8 ,即使客户端指定了另一种编码( forceEncoding = true )。

所以不,这并不意味着您的请求已正确编码,它表示您应该解释即将发布的内容为utf-8。

答案 1 :(得分:0)

在我的具体情况下,我想知道如何在Spring MVC应用程序中编码我的响应,该应用程序使用Jackson映射到JSON。事实证明,杰克逊的默认编码是UTF-8。

对于那些想要了解更多编码的人,会推荐上面的polve答案。