postman测试用form-data混合提交key-value和文件上传时,key-value中的value中文乱码问题解决方案!

     用postman的form-data方式,测试一个文件上传功能时,Java后台接受中文参数乱码的解决过程

一、正如标题所说的中文乱码问题,如下图;

postman测试用form-data混合提交key-value和文件上传时,key-value中的value中文乱码问题解决方案!_第1张图片

二、用postman的“Body”--“form-data”方式提交键值对,其中有提交文件上传的key-value;

postman测试用form-data混合提交key-value和文件上传时,key-value中的value中文乱码问题解决方案!_第2张图片

注:其实选择"Body"--"form-data"选项就不用在“Headers”中设置Content-Type:multipart/form-data了;如下图

postman测试用form-data混合提交key-value和文件上传时,key-value中的value中文乱码问题解决方案!_第3张图片

三、使用Tomcat作服务时,文件上传需要在web.xml文件中添加如下配置:


        readonly
        false

如图:

postman测试用form-data混合提交key-value和文件上传时,key-value中的value中文乱码问题解决方案!_第4张图片

否则,会抛出异常:

com.sun.jersey.api.client.UniformInterfaceException: PUT http://localhost:8080/xxxxx.txt returned a response status of 403 Forbidden

四、解决请求到后端中文乱码的难缠问题的思路。

1、在Tomcat的server.xml中加上URIEncoding="UTF-8"并没有起到解决中文乱码的作用。

2、另外,在请求到Controller时,在Controller开头加上request.setCharacterEncoding(“UTF-8”); 也不行。

原因是:是在调用Controller之前,前端请求的表单参数(key-value)取出并填充到Controller的方法接收参数中了,也就是POJO或VO参数。如果要使用中文,则需要在取出来的时候就设置好编码UTF-8,取出之后设置就没用了。

那么,可以在请求Controller之前设置编码。因为Controller本质也是一个servlet,要解决这个问题需要在servlet执行之前设置好编码。

五、解决方案:使用一个Filter取出request设置需要的编码,然后配置在web.xml中。

使用SpringMVC内置的 org.springframework.web.filter.CharacterEncodingFilter来设置一个编码filter:

 <filter>
       
CharacterEncodingFilter
        ilter-class>org.springframework.web.filter.CharacterEncodingFilter
       
             
encoding
             
utf-8
       
 

 
       
CharacterEncodingFilter
       
/*
 

最后,只需要在web.xml中加上这段配置就可以解决以上所说的中文乱码问题了。

 

 

你可能感兴趣的:(SpringMVC,Tomcat)