Spring boot 前端传到后端的参数多了个逗号
由于spring boot(Spring MVC)请求校验比较严格,从老版本的jetty微服务servlet 请求改造过程中发现参数处理莫名多出一些符号。经过排查作如下总结: 1、如果请求方的请求头是text/plain等时,spring boot服务接口没有设置接受请求头,比如@RequestMappin默认application/x-www-form-urlencoded;charset=U.
由于spring boot(Spring MVC)请求校验比较严格,从老版本的jetty微服务servlet 请求改造过程中发现参数处理莫名多出一些符号。经过排查作如下总结:
1、如果请求方的请求头是text/plain等时,spring boot服务接口没有设置接受请求头,比如@RequestMappin默认application/x-www-form-urlencoded;charset=UTF-8进行参数处理,通过@RequestBody注解获取字符请求体时,请求体后面会多一个=号,因为spring boot 默认按form表单进行参数处理,把请求体进行url参数方式(key=value&key2=val2)进行处理,所以请求体会多出等号。
2、结构form参数时候,存在多个相同参数时候,会把参数按逗号进行拼接,如key=value1,value2 加入一个value为空值情况时候key=value, 接受参数就处理多余字符。所以一定小心传参。
3、当@RequestMappin 中设置Consumer 来匹配请求头,不符合对应请求头请求,可能会请求失败,或者请求体接受时候,会进行截段等处理。
我遇到的情况就是第二种,由于
var url = "/paybill.do?method=view&orderid=123";
$("#mainForm").attr("action", url);
$("#mainForm").submit();
在这段js代码里初一看没什么问题,但是其实我却忽略了在id为mainForm的表单中同样也有着以一个orderid的字段,所以倒是orderid参数后面莫名成了“order,”
但是我这边还是出现比较奇怪的情况就是在360浏览器遇到的这个问题却在谷歌浏览中正常传参,不知哪位大神为我解答解答一下呢
更多推荐
所有评论(0)