欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springmvc中@RequestParam传值中文乱码问题

程序员文章站 2022-05-30 23:39:12
...

传值的方式有get请求和post请求两类

对于GET请求

中文乱码问题是Tomcat服务器的编译导致的,Tomcat默认的编码是ISO8859-1。所以解决GET请求传值中文乱码的问题可以从Tomcat和自己写的代码两个方向来解决

更改Tomcat配置解决

在tomcat中server.xml中加上一个 URIEncoding=”utf-8” 

<Connector connectionTimeout="20000" port="8000" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>

代码解决

GET请求传值的方式有两种,一种是http://xxx/yy?param=ZZZ,一种是RESTful的:http://xxx/yy/哈哈哈

对于第一种,可以通过一个工具类来转换编码,核心是String类的构造方法String(byte[] bytes, Charset charset)

public class CodingTool{
	public static String encodingStr(String str) {
		try {
			return new String(str.getBytes("ISO8859-1"),"UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return null;
	}
}

@RequestMapping(value="/yy")  
public ModelAndView method(   
            @RequestParam("param")String param) {  
    ModelAndView mav = new ModelAndView();  
    mv.addObject("param", CodingTool.encodingStr(param));  //转码
    mv.setViewName("/aaa");  
    return mav; 
}
或者直接写
@RequestMapping(value="/yy")  
public ModelAndView method(   
            @RequestParam("param")String param) throws UnsupportedEncodingException{  
    ModelAndView mav = new ModelAndView();  
    mv.addObject("param", new String(param.getBytes("ISO8859-1"),"UTF-8"));  //转码
    mv.setViewName("/aaa");  
    return mav; 
}

对于第二种,按照https://blog.csdn.net/andong154564667/article/details/51680462的说法,直接按照相应的格式编写即可,不存在乱码的问题,但是我写还是会出现乱码


http://xxx/yyy/张三
@RequestMapping(value="/yyy/{param}") 
public String getUserById0(@PathVariable("param")String param) {
	 ModelAndView mv = new ModelAndView();  
    mv.addObject("param", param);   
    mv.setViewName("/aaa");  
    return mv; 
}

对于POST请求

在web.xml文件中添加如下代码。但这种方法只能解决post请求的中文乱码问题,而目前好像很少有看到问POST请求乱码问题的

<!-- 字符编码过滤器 :
		只负责解决POST请求乱码问题.
	-->
	<filter>
		<filter-name>encoding</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>encoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>