contentType:"application/json" 怼烎@ 2022-05-15 00:07 178阅读 0赞 在jquery的ajax中,如果没加contentType:"application/json",那么data就应该对应的是json对象;反之,如果加了contentType:"application/json",那么ajax发送的就必须是字符串。 下面便是两种犯错的例子: 1>前台ajax多加了contentType:"application/json",data却错传成json对象: ![20180313165134961][] 后台处理:(employee该pojo对象里有username和password等String字段) ![20180313170352759][] 结果都为null ![20180313170436152][] 将contentType去掉后, ![20180313170802759][] 后台成功反射出对象: ![20180313170839830][] 2>ajax中没加contentType:"application/json",data却直接使用了json字符串(和上面的一个道理) ![20180313171239442][] 后台情况: ![20180313171308949][] 3>第三点是真的有点恶心的一点,找了好久才找到。。 **那就是有些关键的属性在Mvc层中反射失败,会导致其他所有属性都为null** **![70][]** **![70 1][]** **![70 2][]** **比如上面的joindate对应的pojo是Date,本来input框里的值是 Thu Dec 30 00:00:00 CST 1999 ,传到后台用Date接收,但是显然格式不对,于是Date合成出了错,然后坑爹的就来了,因为这个特殊的属性反射失败,Mvc层就将请求打回去然后导致浏览器报错400 bad request ,从而导致其他所有属性都为null。最后把joindate属性注释掉,后台什么属性的值都收到了。。** 补充:我们都知道,不管前台发送的是json字符串还是对象,服务器本质上收到的都是字符流,那么为什么ajax又可以直接传对象呢?因为不加contentType:"application/json"的时候,发送类型变为默认的application/x-www-form-urlencoded,而这种方式会以键值对的形式将对象序列化,所以传进去的对象实际上还是变成了字符流。 [20180313165134961]: /images/20220515/a2b2da61280943ab8d298209dd5b3703.png [20180313170352759]: /images/20220515/981a968a2d694a4481ae4b65ec9a3dd2.png [20180313170436152]: /images/20220515/a27380584e6440e1860bd2efab65422c.png [20180313170802759]: /images/20220515/0cea3bd5e1b84c87b59a9b43cbbcfa94.png [20180313170839830]: /images/20220515/75c8896660a344039b1a7acf29bee3ec.png [20180313171239442]: /images/20220515/ce2cba81d0f3477c9f5c7b5beaf8f78c.png [20180313171308949]: /images/20220515/3fc650a0ea8d4ae8b38bfcd70588d8e0.png [70]: /images/20220515/524b70c9d2964d2c9b9842844cb367a7.png [70 1]: /images/20220515/c971eb34862e4ec1a72229833495d2a5.png [70 2]: /images/20220515/b44fb95d361549048817a012cf7a71ee.png
还没有评论,来说两句吧...