2014-08-28 58 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字符串。

愿这能帮助你。