SpringMVC - 请求参数中文乱码的问题

问题背景

后台开发的过程中,我们常常会根据@RequestParam从Form Data ,或者@PathVariable 从URL中获取参数数据。例如:
案例1:

@RequestMapping("/",method = RequestMethod.POST)
public String Demo1(@RequestParam(name="lid") int id){
    System.out.println("----"+id);
    return null;
}

案例2:

    // restful风格的接口,请求的URL上含有路径参数,可以利用正则的方式匹配获取
    @RequestMapping(value = {"/rest/AlarmUser/{userName:.*}"}, method = RequestMethod.POST)
    @ResponseBody
    public String updateAlarmUser(@PathVariable String userName) {
        log.info("request param: userName="+userName);
        //something else

当其中有中文的时候,不可避免发生了乱码。

解决方案

GET方法

方法一:修改Tomcat的server.xml

因为Tomcat默认使用ISO-8859-1进行解码的,可以将其统一设定为“utf-8”编码。


添加URIEncoding="utf-8"


方法二:手动更改

可以基于下面的语法写个工具类。

String name = new String(name.getBytes("ISO-8859-1"),"UTF-8");

POST方法

方法一:使用Spring的字符过滤器

配置在web.xml中:


      encoding
       org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
          
            forceEncoding  
            true  
         



  encoding
  /*

有人说,已经配置,但是不起作用。那么,请检查一下你的过滤器的位置,一定要放在所有其他过滤器之前

下面举一个设置失效的案例:




    
        springdispatcherServlet
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:springmvc.xml
        
        1
    

    
        springdispatcherServlet
        /
    

    
        HiddenHttpMethodFilter
        org.springframework.web.filter.HiddenHttpMethodFilter
    

    
        HiddenHttpMethodFilter
        /*
    

    
        encoding
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
          
            forceEncoding  
            true  
         
    
    
   
        encoding
        /*
    
     # 放在了HiddenHttpMethodFilter的后面

  
    index.jsp
  

测试了几种设置方案,直接放在springdispatcherServlet下,可以使用,也推荐这种写法。

方法二:手动更改

与GET方法类似,这里不再赘述。

参考资料

  1. SpringMVC - 参数中文乱码的问题

你可能感兴趣的:(SpringMVC - 请求参数中文乱码的问题)