Spring MVC响应编码问题 [英] Spring MVC response encoding issue

查看:160
本文介绍了Spring MVC响应编码问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在过去几个小时,我已经阅读了很多关于这个主题,到目前为止没有什么工作。我试图返回包含奇怪一些字符的响应。下面是一个很简单的例子:

  @ResponseBody 
@RequestMapping(value =test)
public String test(){
String test =čćžđš;
System.out.println(test);
logger.info(test);
return test;
}

这是我的



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

解决方案

几天后,我只有谁是你的爸爸时刻。它来自阅读spring 3.0参考,我没有什么别的可以尝试,所以为什么不走槽整个文档..和组合@axtavt答案:



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



更改原始解决方案:

  public class EncodingPostProcessor实现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 (text,html,
Charset.forName(UTF-8)))));
}
}
}
return bean;
}

To:

  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 (text,plain,
Charset.forName(UTF-8)))));
}
}
}
return bean;
}

但仍然会继续使用它。


In last few hours I've read a lot concerning this topic, and so far nothing has worked. I'm trying to return response containing "odd" some characters. Here is example of that, quite simple :

@ResponseBody
    @RequestMapping(value="test")
    public String test(){
        String test = "čćžđš";
        System.out.println(test);
        logger.info(test);
        return test;
    }

This is my web.xml, because I found some answers where CharacterEncodingFilter helped(not in my case though). I used POST method because I read this applies to POST.

Also found this answer(related). Didn't help as well.

When I debug it the correct value appears, but when I print it doesn't as it can be seen below:

When I test it from jmeter, the response seems to be OK, Content-Type is text/html;charset=UTF-8

Here is a screenshot of that as well. http://i56.tinypic.com/14lt653.jpg

I think the right way is to return UTF-8, maybe I'm wrong.

解决方案

After few days of this I just had "who's your daddy moment". It came from reading spring 3.0 reference, I had nothing else to try so why not go trough entire documentation.. and combination of @axtavt answer :

Who sets response content-type in Spring MVC (@ResponseBody)

Changed original solution :

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;
    }

To :

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;
    }

Darn spring!!! but still I'll continue to use it.

这篇关于Spring MVC响应编码问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆