返回结果“??”
- @RequestMapping(value="/getForm")
- @ResponseBody
- publicStringgetForm(Stringpid){
- return"你好";
- }
返回结果“你好”
- @RequestMapping(value="/getForm")
- @ResponseBody
- publicList<String>getForm(Stringpid){
- returnnewArrayList<String>(){{
- add("你好")
- }};
- }
- <?xmlversion="1.0"encoding="UTF-8"?>
- <beansxmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"
- xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http:
- http:
- http:
- <context:component-scanbase-package="cn.netcluster.workflow.**"/>
- <mvc:annotation-driven/>
- <mvc:default-servlet-handler/>
- <bean
- class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
- id="multipartResolver">
- <propertyname="defaultEncoding"value="UTF-8"/>
- <propertyname="uploadTempDir"value="resources/attach/temp"/>
- </bean>
- </beans>
使用的是Spring3.1
问题补充:
xiaoZ5919 写道
你遇到的是第一个方法直接返回String会乱码,而返回list的那个不会乱码是吧?
这可以说是spring mvc的一个bug,spring MVC有一系列HttpMessageConverter去处理用@ResponseBody注解的返回值,如返回list则使用MappingJacksonHttpMessageConverter,返回string,则使用StringHttpMessageConverter,这个convert使用的是字符集是iso-8859-1,而且是final的
- publicstaticfinalCharsetDEFAULT_CHARSET=Charset.forName("ISO-8859-1");
解决的办法:
你自己重写一个StringHttpMessageConverter,使用你想要的字符集,并且使这个属性可注入
- <beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
- <propertyname="messageConverters">
- <util:list>
- <beanclass="com.pcds.ecomm.website.syscustomization.ConfigurableStringHttpMessageConverter">
- <constructor-argvalue="UTF-8"/>
- </bean>
- <beanclass="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
- </util:list>
- </property>
- </bean>
另外一种直接放弃String,而是使用对象
我之前是这样写的,也没有用
- <bean
- class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
- <propertyname="messageConverters">
- <list>
- <bean
- class="org.springframework.http.converter.StringHttpMessageConverter">
- <propertyname="supportedMediaTypes">
- <list>
- <value>text/plain;charset=UTF-8</value>
- </list>
- </property>
- </bean>
- <bean
- class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
- </list>
- </property>
- </bean>
问题补充:
xiaoZ5919 写道
- if(writeAcceptCharset){
- outputMessage.getHeaders().setAcceptCharset(getAcceptedCharsets());
- }
- MediaTypecontentType=outputMessage.getHeaders().getContentType();
- Charsetcharset=contentType.getCharSet()!=null?contentType.getCharSet():DEFAULT_CHARSET;
- FileCopyUtils.copy(s,newOutputStreamWriter(outputMessage.getBody(),charset));
兄弟我一直都设置了这个
- <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>
- <filter-mapping>
- <filter-name>CharacterEncodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
问题补充:
xiaoZ5919 写道
兄弟 也许我没有说清楚,
需要设置的是response.setContentType("text/html; charset=UTF-8")
而不是response.setCharacterEncoding(this.encoding);
你看看我贴的代码就知道了
Charset charset = contentType.getCharSet() != null ? contentType.getCharSet() : DEFAULT_CHARSET;
那个filter里面设置的是
response.setCharacterEncoding(this.encoding);
不过我觉得这不是一个好的办法
最好的办法还得是重写一个StringHttpMessageConverter,使其能灵活配置charset
xiaoZ5919 写道
兄弟 也许我没有说清楚,
需要设置的是response.setContentType("text/html; charset=UTF-8")
而不是response.setCharacterEncoding(this.encoding);
你看看我贴的代码就知道了
Charset charset = contentType.getCharSet() != null ? contentType.getCharSet() : DEFAULT_CHARSET;
那个filter里面设置的是
response.setCharacterEncoding(this.encoding);
不过我觉得这不是一个好的办法
最好的办法还得是重写一个StringHttpMessageConverter,使其能灵活配置charset
兄弟还是不行哦
- @RequestMapping(value="/getForm")
- @ResponseBody
- publicStringgetForm(HttpServletResponseresponse,Stringpid){
- response.setContentType("text/html;charset=UTF-8");
- System.out.println(super.formService.getRenderedStartForm(pid)
- .toString());
- return"你好";
- }
分享到:
相关推荐
Spring MVC下彻底解决@ResponseBody转义html特殊字符问题,解决包括尖角号(),单引号('),双引号("),按位与(&),反斜杠(\)。
--处理 @ResponseBody 中文乱码问题 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!-- Support...
下面小编就为大家分享一篇spring+mybatis 通过@ResponseBody返回结果中文乱码的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
主要介绍了Springmvc 4.x利用@ResponseBody返回Json数据的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了SpringMVC中解决@ResponseBody注解返回中文乱码问题, 小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
SpringMVC使用@ResponseBody.rar
主要介绍了@ResponseBody 和 @RequestBody 注解的区别的相关资料,需要的朋友可以参考下
本篇文章主要介绍了springMvc注解之@ResponseBody和@RequestBody详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了关于@ResponseBody 默认输出的误区的解答,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
springmvc进行Jason数据封装转化时可以即使用也是@responsebody对数据进行封装的时候需要的工具类
springmvc+国际化i18N+springmvc验证+jetbrick-template使用+@responsebody+谷歌guava: 1)围绕springmvc做的国际化 2)围绕springmvc做的验证 3)使用的jetbrick-template模板引擎 ……
主要介绍了spring boot @ResponseBody转换JSON 时 Date 类型处理方法,主要给大家介绍Jackson和FastJson两种方式,每一种方法给大家介绍的都非常详细,需要的朋友可以参考下
问题POST提交乱码@ResponseBody 返回乱码解决://添加 produces = "application/json;
NULL 博文链接:https://snowolf.iteye.com/blog/1628861
1)spring MVC 中@ResponseBody需要的所有JAR包 2)性能还不错的模板引擎jetbrick-template-2.x 2.x的所需的所有jar包 3)日志jar包:slf4j和logback 所有 4)阿里 druid 连接池jar包 5)mysql数据库链接驱动jar包 6...
NULL 博文链接:https://nethub2.iteye.com/blog/2329387
具体包括三个jar: jackson-databind-2.8.2.jar jackson-core-2.8.2.jar jackson-annotations-2.8.2.jar
NULL 博文链接:https://bijian1013.iteye.com/blog/2310236
NULL 博文链接:https://bijian1013.iteye.com/blog/2310240