使用springmvc和Ajax進行數據交互時使用標籤@RequestBody時我報了這兩個錯,剛開始對springmvc的使用和註解有點迷,而後踩坑上了。ajax
先說下怎麼纔會踩上去。首先@RequestBody在一個Controller的一個方法中只能用一次,因此若是你使用了兩次意圖在一個方法中封裝兩個實體,那你鐵定時解決不了的.spring
緣由:1.request.getInputStream()在一次請求只執行一次。@RequestBody是將前臺傳遞的對象一次性嘗試封裝到你使用的實體中,也就是你設置在@RequstBody後面的那個參數。若是你實在是有必要在這個方法中使用多個實體的屬性的話,我建議新建一個實體Bean。將你須要的實體屬性封裝,而後確保你發送的Ajax數據正確的被轉成json格式的字符串而不是對象而後發給controller。json
2.傳遞的json的 key值和你指望封裝的實體名要一致,你能夠少給 但必定不要多給,不要亂給。好比方法中你指望 @requestBody User user包含 String username ,String password,Long user_id;你能夠在Ajax中只發送 username 或password 或user_id瀏覽器
或者任意兩種,三種的組合。你不能給usernnnnnname,或者其餘亂七八糟的東西,總之就是少給能夠 ,多給不行,亂給也不行。mvc
3.若是你不肯定你的Ajax是否使用正確的話,就將必要的參數設置徹底如設置瀏覽器的content-Type :contentType:'application/json;charset=utf-8' 另外確保沒有中文格式的字符。參照app
1 function submitComment(){ 2 var comment_details=$('#comment_details').val(); 3 var forum_id=$('#forum_id').val(); 4 var dataa={ 5 "comment_details":comment_details, 6 "forum_id":forum_id, 7 }; 8 var d=JSON.stringify(dataa); 9 $.ajax({ 10 type:'post', 11 url:'../comment/releaseComment', 12 contentType:'application/json;charset=utf-8', 13 data:d, 14 dataType:'json', 15 success:function(data){ 16 $('#comment_details').val(''); 17 window.location.reload(); 18 } 19 }) 20 }
JSON.stringify是個不錯的工具,可是網上貌似有老哥被坑過由於通過這個函數轉換後json對象會變成json字符串函數
。以上就是我糾結了挺久的@RequestBody 報錯400 和415的解決辦法。工具