Spring MVC响应中无法正确显示中文字符

时间:2014-02-24 11:00:29

标签: java spring-mvc encoding internationalization

我使用REST实施了一项搜索Spring MVC服务,该服务在JSON中返回响应。响应包含包含搜索词的hrefs(self等)。中文搜索词在href中没有正确显示,它显示如下:

%E5%A4%AA%E9%99%BD%E7%B3%BB%E4%B8%AD

我尝试使用URLEndoer.encode(myString, "UTF-8"),但这不起作用。

修改

我找到了根本原因,这是对New URI(myparams).toAsciiString()的调用导致了这个问题。

3 个答案:

答案 0 :(得分:1)

您需要使用CharacterEncodingFilter课程。 CharacterEncodingFilter过滤器需要按以下方式在web.xml中声明。

<filter>  
    <filter-name>encodingFilter</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>encodingFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping> 

答案 1 :(得分:0)

响应中设置的content-type标头是什么?您可以使用浏览器中的开发人员工具查看HTTP响应进行检查。

应该是:application/json; charset=UTF-8

答案 2 :(得分:0)

在发送响应时,您可以在搜索方法中设置字符编码

这将确保返回的响应采用UTF-8,并且将显示汉字 @RequestMapping(value = "", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") ResponseEntity<String> search(HttpServletRequest request, HttpServletResponse response); 编辑:我尝试使用web.xml中的过滤器,但是没有用。