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

传值的方式有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>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值