SpringMVC綁定ajax傳遞json數據到pojo對象錯誤(400 Bad Request)

問題如標題所述,ajax向SpringMVC Controller傳遞JSON數據,遇到了錯誤“Failed to load resource: the server responded with a status of 400 (Bad Request)”,該錯誤爲前端報錯,JSON數據壓根沒有被Controller接收。因爲後端想通過接收JSON數據直接轉換爲pojo對象,進行pojo綁定。

經過一晚上的調試,最後定位問題於後臺Controller無法轉換接收到的JSON數據。進一步尋找解決方案,定位到了問題原因:pojo類中存在Date類型成員變量,轉換器無法將Date類型成員變量正確轉換。通過使用沒有Data類型數據成員的pojo類進行測試,發現確實是問題的真正原因。

1. 解決方案

實體類中加日期格式化註解

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date algorithmTime;

進一步,在相對應的pojo類中增添默認構造函數,沒有這一步可能無法解決問題,所以該步驟極爲重要。可能是由於在轉換器轉換過程中要調用默認構造函數來構造pojo對象。

public class Algorithm {
    //默認構造函數
    public Algorithm(){
    }
}

2. SpringMVC接收ajax的JSON數據,後端綁定pojo對象

前端ajax:

 var alg={
     algorithmName:algName,
     algorithmDescribe:algDesc,
     classId:classId,
     className:className
 };
 $.ajax({
     type:'POST',
     url:'algorithm/add',
     data:JSON.stringify(alg),
     dataType:'json',
     contentType:'application/json; charset=utf-8',
     async:true,
     success:function(data){
         console.log(data['algInfo']);
     }
 });

Controller處理:

@RequestMapping(value = "/algorithm/add",method = RequestMethod.POST,consumes = "application/json")
@ResponseBody
public String addAlgorithm(@RequestBody Algorithm algorithm){
     /**
       * 處理步驟
       **/
     Map<String,String> map=new HashMap<String, String>();
     map.put("algInfo",algorithm.toString());
     return map;
}

該問題還有許多解決的辦法,但是這個方法是最簡單的。在解決這個問題的過程中,《SpringMVC中出現”400 Bad Request”錯誤(用@ResponseBody處理ajax傳過來的json數據轉成bean)的解決方法》和《SpringMVC日期類型轉換問題三大處理方法歸納》這兩篇博文和博文的評論給了我非常大的幫助,感謝作者,其他的解決方法也可以從這兩篇博文中找到。

參考:

  1. http://blog.csdn.net/chenleixing/article/details/43740759
  2. http://blog.csdn.net/chenleixing/article/details/45190371
  3. @InitBinder 用法
  4. SpringMVC中的參數綁定總結
  5. SpringMVC Ajax 獲取參數的方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章