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

本文介绍如何解决使用Postman测试文件上传功能时,Java后台接收到的中文参数出现乱码的问题。通过在web.xml中配置Tomcat,并利用SpringMVC的CharacterEncodingFilter设置编码,有效避免中文乱码。

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

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

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

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

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

<init-param>
        <param-name>readonly</param-name>
        <param-value>false</param-value>
</init-param>

如图:

否则,会抛出异常:

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

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值