Spring MVC 响应编码问题

ant*_*ant 5 java servlets spring-mvc character-encoding

在过去的几个小时里,我读了很多有关这个主题的文章,但到目前为止没有任何效果。我正在尝试返回包含“奇数”一些字符的响应。这是一个例子,非常简单:

\n\n
@ResponseBody\n    @RequestMapping(value="test")\n    public String test(){\n        String test = "\xc4\x8d\xc4\x87\xc5\xbe\xc4\x91\xc5\xa1";\n        System.out.println(test);\n        logger.info(test);\n        return test;\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的web.xml,因为我找到了一些 CharacterEncodingFilter 提供帮助的答案(但不是我的情况)。我使用 POST 方法是因为我读到这适用于 POST。

\n\n

还找到了这个答案(相关)。也没有帮助。

\n\n

当我调试它时,会出现正确的值,但是当我打印时,它不会出现,如下所示:

\n\n

在此输入图像描述

\n\n

当我从 jmeter 测试它时,响应似乎没问题,Content-Typetext/html;charset=UTF-8

\n\n

这也是它的屏幕截图。http://i56.tinypic.com/14lt653.jpg

\n\n

我认为正确的方法是返回UTF-8,也许我错了。

\n

ant*_*ant 1

几天后,我刚刚经历了“谁是你爸爸的时刻”。它来自阅读 spring 3.0 参考,我没有其他可尝试的内容,所以为什么不仔细阅读整个文档..以及 @axtavt 答案的组合:

谁在 Spring MVC 中设置响应内容类型(@ResponseBody)

改变了原来的解决方案:

public class EncodingPostProcessor implements BeanPostProcessor {
    public Object postProcessBeforeInitialization(Object bean, String name)
            throws BeansException {
        if (bean instanceof AnnotationMethodHandlerAdapter) {
            HttpMessageConverter<?>[] convs = ((AnnotationMethodHandlerAdapter) bean).getMessageConverters();
            for (HttpMessageConverter<?> conv: convs) {
                if (conv instanceof StringHttpMessageConverter) {
                    ((StringHttpMessageConverter) conv).setSupportedMediaTypes(
                        Arrays.asList(new MediaType("text", "html", 
                            Charset.forName("UTF-8"))));
                }
            }
        }
        return bean;
    }
Run Code Online (Sandbox Code Playgroud)

到 :

public class EncodingPostProcessor implements BeanPostProcessor {
    public Object postProcessBeforeInitialization(Object bean, String name)
            throws BeansException {
        if (bean instanceof AnnotationMethodHandlerAdapter) {
            HttpMessageConverter<?>[] convs = ((AnnotationMethodHandlerAdapter) bean).getMessageConverters();
            for (HttpMessageConverter<?> conv: convs) {
                if (conv instanceof StringHttpMessageConverter) {
                    ((StringHttpMessageConverter) conv).setSupportedMediaTypes(
                        Arrays.asList(new MediaType("text", "plain", 
                            Charset.forName("UTF-8"))));
                }
            }
        }
        return bean;
    }
Run Code Online (Sandbox Code Playgroud)

该死的春天!!!但我仍然会继续使用它。