昨天看了不少的帖子,都没有解决StringHttpMessageConverter问题,今天在http://stackoverflow.com上面看到个帖子,希望对大家有用。关于这个问题造成的原因我就不解释了,相信大家也看了超多的帖子了。
我用的版本是spring mvc3.1.3
?
我个人觉得这个帖子还比较实用。给大家分享下
http://stackoverflow.com/questions/3616359/who-sets-response-content-type-in-spring-mvc-responsebody/7772620#7772620
?
很多的帖子都是说重写StringHttpMessageConverter,我得强调下:
However, using this method you have to redefine all?HttpMessageConverter
s, and also it doesn't work with?<mvc:annotation-driven />
.
然而,用这个方法你不得不重新定义HttpMessageConverter
s,并且 他不得和<mvc:annotation-driven />
.这个标签一起工作。?
?
既然不能工作,我们怎么办呢?
这里有一篇文章,我也就大概看了下,具体里面有没有错,我也没仔细看,没去验证,大家可以借鉴下。
? http://www.mspring.org/post/2012/7/14/1344938579544
?
另外stackoverflow.com上面提供了令外一种最方便却丑陋的(非常规)的方法 ,拦截theAnnotationMethodHandlerAdapter
?的实例化
?
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; } public Object postProcessAfterInitialization(Object bean, String name) throws BeansException { return bean; }}-<bean class = "EncodingPostProcessor " />
??
?最后我没有重写HttpMessageConverter
s,配置了原有的HttpMessageConverter
s(value = "text/plain;charset=UTF-8")不知道是不是符合你们的情况,但是解决了我的乱码问题。
我的配置是 ? (删除了?mvc:annotation-driven )
<!-- mvc:annotation-driven --> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> <!--启动Spring MVC的注解功能,设置编码方式,防止乱码 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!-- 把ByteArray加在Json前面 --> <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /><!--有下载功能--> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <bean class = "org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes" value = "text/plain;charset=UTF-8" /> </bean> </list> </property> </bean>
??
?
自己很懒的,就这样吧,有问题可以再讨论。
?
如果发现真的是误认子弟,切记提醒我删除。
?