springMVC中前台ajax传json数据后台controller接受对象为null

本秂侑毒 提交于 2020-11-12 10:59:52

<div class="htmledit_views"> <p><span style="font-size:16px;">在jquery的ajax中,如果没加</span><span style="font-size:18px;">contentType:"application/json",那么data就应该对应的是json对象,</span><span style="font-size:18px;">反之,如果加了</span><span style="font-size:18px;">contentType:"application/json",那么ajax发送的就必须是字符串。</span></p><p><span style="font-size:18px;">下面便是两种犯错的例子:</span></p><p><span style="font-size:18px;">1&gt;前台ajax多加了contentType:"application/json",data却错传成json对象:</span></p><p><img src="//img-blog.csdn.net/20180313165134961" alt=""><br></p><p>后台处理:(employee该pojo对象里有username和password等String字段)</p><p><img src="//img-blog.csdn.net/20180313170352759" alt=""><br></p><p>结果都为null</p><p><img src="//img-blog.csdn.net/20180313170436152" alt=""><br></p><p>将contentType去掉后,</p><p><img src="//img-blog.csdn.net/20180313170802759" alt=""><br></p><p>后台成功反射出对象:</p><p><img src="//img-blog.csdn.net/20180313170839830" alt=""><br></p><p><br></p><p><br></p><p><span style="font-size:18px;">2&gt;ajax中没加contentType:"application/json",data却<span style="font-size:18px;">直接使用了json字符串(和上面的一个道理)</span></span></p><p><span style="font-size:18px;"><img src="//img-blog.csdn.net/20180313171239442" alt=""><br></span></p><p><span style="font-size:14px;">后台情况:</span></p><p><span style="font-size:18px;"><img src="//img-blog.csdn.net/20180313171308949" alt=""><br></span></p><p><br></p><p><br></p><p>3&gt;第三点是真的有点恶心的一点,找了好久才找到。。</p><p><strong>那就是&nbsp; 有些&nbsp; 关键的属性在Mvc层中反射失败,会导致其他所有属性都为null</strong></p><p><strong><img src="https://img-blog.csdn.net/20180702024436157?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3OTYwMDA3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" alt=""><br></strong></p><p><strong><img src="https://img-blog.csdn.net/20180702024544554?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3OTYwMDA3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" alt=""><br></strong></p><p><strong><img src="https://img-blog.csdn.net/20180702024754668?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3OTYwMDA3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" alt=""><br></strong></p><p><strong>比如上面的joindate对应的pojo是Date,本来input框里的值是 Thu Dec 30 00:00:00 CST 1999 ,传到后台用Date接收,但是显然格式不对,于是Date合成出了错,然后坑爹的就来了,因为这个特殊的属性反射失败,Mvc层就将请求打回去然后导致浏览器报错400 bad request ,从而导致其他所有属性都为null。最后把joindate属性注释掉,后台什么属性的值都收到了。。</strong></p><p><br></p><p><br></p><p><span style="font-size:16px;">补充:我们都知道,不管前台发送的是json字符串还是对象,服务器本质上收到的都是字符流,那么为什么ajax又可以直接传对象呢?因为不加</span><span style="font-size:18px;">contentType:"application/json"的时候,发送类型变为默认的<span style="font-family:'-apple-system', 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, SimHei, SimSun;background-color:rgb(255,255,255);">application/x-www-form-urlencoded,而这种方式会以键值对的形式将对象序列化,所以传进去的对象实际上还是变成了字符流</span></span></p><p></p><p></p><p></p><p><span style="font-size:18px;"><span style="font-size:24px;"><br></span></span></p><p><span style="font-size:18px;"><span style="font-size:24px;"><br></span></span></p><p><span style="font-size:18px;">&nbsp;</span></p> 原文连接:https://blog.csdn.net/qq_37960007/article/details/79542727 </div>

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!