美文网首页
RESTful带中文url传参时springmvc绑定参数乱码问

RESTful带中文url传参时springmvc绑定参数乱码问

作者: 茶酒qqq | 来源:发表于2020-02-29 19:18 被阅读0次

RESTful风格的url包含中文的name,在用@PathVariable绑定参数时,发现乱码问题,打印name全是???

 @RequestMapping(value = {"/category/id/{id}","/category/name/{name}"},method = RequestMethod.GET)
    @ResponseBody
    public Response<Category> findOne(@PathVariable(required = false) Integer id,@PathVariable(required = false) String name){

由于postman访问的url自动编码为

    http://localhost:8080/MyPoetry/category/name/%E5%92%8F%E7%89%A9

因此可知是UTF-8编码后对每个字节前加入%形成url编码。

由于tomcat默认使用ISO-8859-1对接收的文本编码,因此要获得正确中文有两种解决方式:

  • 自己转码
  • 修改tomcat默认编码

自己转码

使用如下转码方式。先把name以ISO-8859-1再编码,还原成字节数组,再用UTF-8进行解码,即可获得正确中文。

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

修改tomcat | conf | server.xml

在server.xml的Connect中添加URIEncoding="utf-8",这样默认就是用utf-8解码了,参数绑定中文也可以正确显示:

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

另,web.xml配置的filter只对post请求有效,因此对此问题不是解决之道:

<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>

参考:

https://blog.csdn.net/wangqing84411433/article/details/72814523

相关文章

网友评论

      本文标题:RESTful带中文url传参时springmvc绑定参数乱码问

      本文链接:https://www.haomeiwen.com/subject/qmvmhhtx.html