2014-08-28 126 views
0

我有發送和接收JSON對象(jQuery的阿賈克斯)郵政陣列到Spring MVC控制器

Java對象

public class UserSkill() { 

private long user; 
private long skill; 
private long level; 

//getter and setter methods 

} 

的列表從控制器我得到的對象和它的清單問題看起來是這樣的

$.getJSON("getList", function(data) { 
    console.log(data); 
}); 

//console log -> [Object { user=4, skill=61, leve=10}, Object { user=3, skill=61, level=20}] 

我改變了一些價值觀和我們下面的代碼

ioarray = []; 

//update methods 

console.log(ioarray); 

//console log -> [Object { user=4, skill=61, level=9000 }, Object { user=3, skill=61, level=100 }] 

阿賈克斯POST

$.ajax({ 
    url : 'goUpdate', 
    type : 'POST', 
    contentType : 'application/json; charset=utf-8', 
    dataType : 'json', 
    data: ioarray, 
    succcess : function(e) { 
     alert('Yeah'); 
} 

控制器

@RequestMapping(value = "goUpdate", method = RequestMethod.POST) 
    public Object goUpdatePOST(@RequestBody List<UserSkill> list) { 

     //list.get(0).getLevel(); 

     return list; 
} 

日誌

type Status report 

message Request method 'POST' not supported 

description The specified HTTP method is not allowed for the requested resource. 

了什麼在這裏...任何想法?

UPDATE;

的Controler

@RequestMapping(value = "goUpdate", method = RequestMethod.POST) 
public @ResponseBody String goUpdatePOST(@RequestBody UserSkill[] list) { 

    for(UserSkill i : list) { 
     System.out.println(i.getSkill()); 
    } 
    return "somepage"; 

} 

jQuery的

var ioarray = [{ user:4, skill:61, level:10}, 
{ user:3, skill:61, level:20}]; 

     $.ajax({ 
      url : 'goUpdate', 
      type : 'POST', 
      data: JSON.stringify(ioarray), 
     }); 

控制檯輸出

JSON 
0 
    Object { user=4, skill=61, level=10} 

1 
    Object { user=3, skill=61, level=20} 

Source 
[{"user":4,"skill":61,"level":10},{"user":3,"skill":61,"level":20}] 

到pom.xml中插入傑克遜映射器-ASL和Jackson核-ASL。

當然這個例子會產生同樣的錯誤......我做錯了什麼?我想我檢查了一切可能性。

+0

嘗試刪除'數據類型:「json'' – 2014-08-28 11:10:01

+0

沒有... POST來源:不確定=不確定= – user2363971 2014-08-28 11:23:21

+0

嘗試刪除'@ RequestBody'然後,有一些問題與發佈的數據及其類型。 – 2014-08-28 11:25:51

回答

2

這是否對你的作品

$.ajax({ 
     url : 'goUpdate', 
     type : 'POST', 
     data: JSON.stringify(ioarray), 
     dataType: "json", 
     contentType: "application/json" 
    }); 
+0

它不工作太...我認爲這可能不是JSON的問題,但還有什麼? – user2363971 2014-08-28 13:57:04

+0

@ user2363971你可以檢查使用螢火蟲什麼是獲取張貼在數據 – 2014-08-28 14:02:55

+0

接受\t應用程序/ JSON,文本/ JavaScript,*/*; Q = 0.01 接受編碼\t gzip的,放氣 接受語言\t PL,EN-US; Q = 0.7,連接; Q = 0.3 內容長度內容類型\t應用/ JSON;字符集= UTF-8 曲奇\t JSESSIONID = BF78D2145022CEAC47AF35260444E8B2 主機\t本地主機:8069 的Referer \t HTTP://本地主機:8069/XXX/indexpage 用戶代理\t的Mozilla/5.0(Windows NT的6.1; WOW64; RV:31.0) Gecko/20100101 Firefox/31.0 X-Requested-With XMLHttpRequest – user2363971 2014-08-28 14:24:55

0

嘗試使用值=「/ goUpdate」

@RequestMapping(value = "/goUpdate", method = RequestMethod.POST)

+0

不幸的不是。這405錯誤讓我發瘋 – user2363971 2014-08-28 13:35:03

+0

嘗試錯誤後仍然405? – franki3xe 2014-08-28 13:40:14

+0

value =「/ goUpdate」,它不起作用... – user2363971 2014-08-28 13:43:53

0

我有同樣的問題,我沒有找到最後的任何解決方案,我有使用簡單HttpServletRequest找到另一種解決方案。
您可以使用HttpServletRequest來讀取請求數據並使用JSON API將此json字符串轉換爲List<UserSkill>對象。您可以使用GSON API將您的json字符串轉換爲列表。

爲此需要在控制器類方法下面變爲如下:

@RequestMapping(value = "goUpdate", method = RequestMethod.POST) 
public @ResponseBody String goUpdatePOST(HttpServletRequest request) 
{ 
    String jsonStr = IOUtils.toString(request.getInputStream()); 
    Gson gson = new Gson(); 
    Type fooType = new TypeToken<List<UserSkill>>() {}.getType(); 
    List<UserSkill> list = gson.fromJson(jsonStr,fooType); 
    return gson.toJson(list); 
} 

在響應發送可以通過使用GSON API轉換成List<UserSkill> JSON字符串被創建JSON字符串。

願這能幫助你。