春天MVC 3.1 - 获取字符编码错误,同时使用注释@ResponseBody(Spring 3

2019-10-17 03:55发布

我同时使用注释@ResponseBody面向字符编码问题。 如果我使用response.getWriter()。write()方法我没有问题,我看不到最喜欢S土耳其字符,O,I,等等。( 我看到的只是问号代替它们

我使用Spring的CharacterEncodingFilter使用UTF-8编码

我怎样才能解决这个问题呢? 我一定要改变我的所有注解@ResponseBody使用的方法来response.getWriter()。write()方法

抽样方法:

@RequestMapping(value = "/isScdValid.ajax")
    public @ResponseBody String isScdValid(HttpServletRequest request, HttpServletResponse response) throws IOException {
        boolean isValid = true; // for sample
        // continues...
        JSONObject jsonObj = new JSONObject();
        jsonObj.put("isValid", isValid);
        if(isValid) {
            jsonObj.put("username", scd.getUsername());
            jsonObj.put("sessionUserId", scd.getUserId());

        }
    return jsonObj.toString(); // not encoding with UTF-8
//        response.getWriter().write(jsonObj.toString()); // works right
    }

这里是我的字符编码过滤器:

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

还增加了财产的URIEncoding到Tomcat:

    <Connector port="9090" protocol="HTTP/1.1" connectionTimeout="20000" 
redirectPort="9443"
URIEncoding="UTF-8" compression="on" 
compressableMimeType="text/html,text/xml,text/javascript,text/json,text/css,text/plain,application/javascript,application/json,application/pdf"
/>

Answer 1:

不幸的是,在注释@ResponseBody控制器返回的字符串设定编码不是一项简单的任务,我想你应该会看到一个类似的问题: 谁在Spring MVC将响应内容类型(@ResponseBody)

在Spring 3.1的配置,你需要设置信息转换器,因为它是在显示罗森Stoyanchev答案 。



文章来源: Spring 3.1 MVC - Getting character encoding error while using @ResponseBody annotation