我们在使用Spring MVC 做java Web项目时,乱码问题时常都会出现,解决方法也不尽相同,有简单也有复杂的;本文我们就来讲一讲Spring MVC乱码问题解决方案。
大家集中精神哦!以下将为大家介绍几种常见的Spring MVC乱码问题解决方案。
1.post乱码
在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>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.Get请求乱码
原因分析:Get请求参数是通过请求首行中的 URI 发送给Web服务器( Tomcat )的。
Tomcat 服务器会对 URI 进行编码操作(此时使用的是 Tomcat 设置的字符集,默认是 iso8859- 1 )到了我们的应用程序中的请求参数,已经是被 Tomcat 使用 ISO8859-1 字符集进行编码之后的了。
解决方法一:
修改tomcat配置文件,指定UTF-8编码,如下:
protocol="HTTP/1.1" redirectPort="8443"/>
解决方法二:
对请求参数进行重新编码,如下:
String username = request.getParamter("userName");
username = new String(username.getBytes("ISO8859-1"),"utf-8") ;
解决方法三:
过滤器+请求装饰器统一解决请求乱码
MyRequestWrapper
MyCharacterEncodingFilter
3.响应乱码
使用 @RequestMapping 注解中的 produces 属性,指定响应体中的编码格式。
// @RequestMapping注解中的consumes和produces分别是为请求头和响应头设置contentType
@RequestMapping(value = "findUserById", produces = "text/plain;charset=UTF8")
@ResponseBody
public String findUserById(Integer id) {
// 在使用@ResponseBody注解的前提下
// 如果返回值是String类型,则返回值会由StringHttpMessageConverter进行处理
return "查询失败";
}
如果加入了Spring框架之后就不一样了,可以采用Spring框架自带的过滤器CharacterEncodingFilter,这样可以大大减轻了我们的工作量,即简单方便又容易理解,配置方式如下:在web.xml文件中filter的位置加上如下内容:
<filter>
<filter-name>encodingFilter</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>encodingFilter</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
springmvc实现上传文件代码片段
<?xml version="1.0" encoding="UTF-8"?>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" /></bean>
@Controller
@RequestMapping("/common")
public class CommonController {
@RequestMapping(value = "/upload")
public @ResponseBody String upload(@RequestParam("file") MultipartFile file, HttpSession session) throws Exception {
File localFile = new File("c:/test/a.rar");
file.transferTo(localFile);
return "success";
}
}
通过以上几个Spring MVC乱码问题解决方案,基本上就能轻松解决Spring MVC中的大部分乱码问题了。
需要的小伙伴可以收藏这几个方法,基本上可以解决大部分的Spring MVC乱码问题。在本站的Spring MVC视频教程中还有许多的乱码问题的实例,感兴趣的小伙伴可以去学习,通过实践,举一反三,直到彻底掌握方法。
QCode09-04 14:38
Code大师09-04 14:50
不写代码你养我啊08-23 11:14
不写代码你养我啊09-17 18:02
要学习了06-18 18:13