Spring MVC响应编码问题 [英] Spring MVC response encoding issue
问题描述
在过去几个小时,我已经阅读了很多关于这个主题,到目前为止没有什么工作。我试图返回包含奇怪一些字符的响应。下面是一个很简单的例子:
@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屋!