2014-02-17 47 views
0

我試圖通過JSON數組成彈簧MVC控制器等這樣的:在JSON數組傳遞到彈簧MVC控制器

var myList = new Array(); 
data._children.forEach(function (d) { 
         myList.push({NAME: d.name, TYPE: d.TYPE, FDATE: d.FDATE }); 
        }); 

$.post("/ListRequest", {myList: myList}); 

控制器看起來這樣:

@RequestMapping(value="/ListRequest", method = RequestMethod.POST) 
    public void ListRequest(@RequestParam("myList") myList tempmyList) 
    { 
     System.out.println(tempmyList); 
    } 

類myList中定義作爲這樣的:

public class MyList { 
    private List<ListT> ListT; 
    public List<ListT> getListT() { 
     return ListT; 
    } 

    public void setListT(List<ListT> listT) { 
     ListT = listT; 
    } 

} 

ListT類:

public class ListT { 
    private String NAME; 
    private String TYPE; 
    private Long FDATE; ... 

我不斷收到此錯誤: HTTP狀態400 - 需要myList中的參數 'myList中' 不存在

也試過這個請求:

$.ajax({ 
       type: "post", 
       url: "ListRequest", //your valid url 
       contentType: "application/json", //this is required for spring 3 - ajax to work (at least for me) 
       data: JSON.stringify(myList), //json object or array of json objects 
       success: function(result) { 
        //do nothing 
       }, 
       error: function(e){ 
        alert('failure'); 
       } 

,但得到這個錯誤:JBWEB000120:請求客戶端發送的語法錯誤。

+1

打開瀏覽器的網絡控制檯並檢查請求中實際寫入了哪些JSON。在這裏發佈。此外,您將需要使用'@ RequestBody'而不是'@ RequestParam'。我會讓你看看爲什麼。 –

+0

我試過了@RequestBody,但是我得到了一個不受支持的mediatype錯誤。此外,JSON如下所示:{「myList」:[{「NAME」:「Blah」,「TYPE」:「TYPE1」,「DATE」:1385874000000}]} – mrkb80

+2

更改您的AJAX請求以發送內容類型爲'應用/ json'。 –

回答

2

嘗試將此添加到您的AJAX調用它應該可以解決不支持的響應:

headers : { 
    'Accept' : 'application/json', 
    'Content-Type' : 'application/json' 
}, 

這是Ajax調用是爲我工作的一個完整的例子:

$.ajax({ 
      dataType : "json", 
      url : this.baseurl + "/dataList", 
      headers : { 
       'Accept' : 'application/json', 
       'Content-Type' : 'application/json' 
      }, 
      data : JSON.stringify(params), 
      type : 'POST', 
      success : function(data) { 
       self.displayResults(data); 
      }, 
      error : function(jqXHR,textStatus,errorThrown){ 
       showPopupError('Error','error : ' + textStatus, 'ok'); 
      } 
     }); 
+0

事實證明我得到了一個404錯誤,因爲控制器沒有返回任何東西,但請求實際上是完全正確的。 – mrkb80

+0

我想使用這個線程引用的技巧。我的Ajax調用指定'contentType:'application/json'','dataType:'json''和'data:{「values」:JSON.stringify(['String1','String2','String3'])}' 。在我的控制器中,我將控制器方法參數註釋爲'@RequestParam List valuesList'。控制器方法被調用,但是當我檢查'valuesList'中的值時,我看到:'[「String1」','「String2」'和'「String3」]'!我究竟做錯了什麼?! –

+0

好像你正在使用GET,我不會使用'@ RequestParam'進行反序列化,嘗試在你的控制器中發送數據並使用'@ RequestBody' – jpprade

-1

您可以嘗試

@RequestParam( 「myList中」)myList中tempmyList


@Param myList中tempmyList

此外,類名稱必須以大寫字母開頭。

+0

你有什麼改變?什麼是@Param?類名_必須不以大寫字母開頭,它們_應以_開頭。 –

+0

修正了大寫,對此感到遺憾。 – mrkb80