背景:
一个简单的Controller类,返回结果直接写死了,跟传的参数没关系
@Controller @RequestMapping("/article") public class ArticleController { @Autowired private ArticleService articleService; @RequestMapping("/add") @ResponseBody public Result add(Article article) { try { articleService.add(article); return new Result("添加成功!"); } catch (Exception e) { return new Result("500","添加失败"+e); } } }
web.xml,该部分配置放在web.xml的最上面
<!-- 从页面post传值到controller时汉字出现问号,注意拦截的顺序,放在web.xml里面的最上面 --> <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>
spring-mvc.xml
<mvc:annotation-driven> <mvc:message-converters><!-- 解决字符串从Controller传递到页面汉字显示问号 --> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg ref="utf8Charset" /> </bean> </mvc:message-converters> </mvc:annotation-driven> <bean id="utf8Charset" class="java.nio.charset.Charset" factory-method="forName"> <constructor-arg value="UTF-8" /> </bean>
使用maven的tomcat7插件,启动项目。
浏览器中输入:http://localhost:8080/spring-web-mybatics/article/add?title=你好&classify=1&content=测试测试测试
返回结果的汉字:“添加成功!变为:”��ӳɹ�
解决方法:
把项目的编码改成UTF-8,重新编译、启动即可。
后来想截图,再把UTF-8改为GBK,问题居然没有复现。。。