form表单提交(POST)springmvc后台乱码

SpringMVC后台乱码


Content-Type: application/x-www-form-urlencoded; charset=UTF-8

乱码原因

在web.xml中编码过滤器的前面加了一个filter,导致form表单提交(POST)到后台时出现中文乱码的情况

<filter>
        <filter-name>encodingFilter</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>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter>

解决方案

将encodingFilter过滤器放在所有其他filter的最前面

扩展

后台实体类接收数据

@RequestMapping(value = "save")
public String save(Entity entity)
	...

方式1. $("#inputForm").submit();方式提交表单时

<form:form id="inputForm" modelAttribute="checkRecord" action="${ctx}/supervisioninspection/checkrecord/save" method="post" class="form-horizontal">
	...
<button type="submit">提 交</button>
</form:form>
前台的请求头 Content-Type: application/x-www-form-urlencoded

方式2. 使用ajax方式提交表单时

<form:form id="inputForm" modelAttribute="checkRecord" class="form-horizontal">
</form:form>
$.ajax({
     url:url,
     method:"post",
     data:$('#inputForm').serialize()
     ...
     })
前台的请求头 Content-Type: application/x-www-form-urlencoded; charset=UTF-8     

第二种方式跟web.xml中过滤器的前后顺序没有关系(即不会出现中文乱码的情况),第一种则相反;
这个问题也是使用第一种方式提交表单时遇到的中文乱码问题

总结

jquery中的.serialize() 方法创建以标准 URL 编码表示的文本字符串。它的操作对象是代表表单元素集合的 jQuery 对象。
所以方式2的.serialize() 方法应该是对参数进行了URL编码,所以即使后台不做处理也不会乱码,可见请求头中加上了字符集编码格式(Content-Type: application/x-www-form-urlencoded; charset=UTF-8 )
[1]: https://blog.csdn.net/lou_hy2016/article/details/79122984
[2]: https://www.cnblogs.com/helloy/articles/5867840.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值