【发布时间】:2014-03-17 01:12:06
【问题描述】:
我正在尝试将 JSON 数组传递给 Spring 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:客户端发送的请求在语法上不正确。
【问题讨论】:
-
打开浏览器的网络控制台并检查请求中实际写入的 JSON。把它贴在这里。此外,您需要使用
@RequestBody而不是@RequestParam。我会让你查一下原因。 -
我尝试了@RequestBody,但收到了不支持的媒体类型错误。 JSON也看起来像这样: {"myList":[{"NAME":"Blah","TYPE":"TYPE1","DATE":1385874000000}]}
-
更改您的 AJAX 请求以将内容类型发送为
application/json。 -
试过这个,但仍然得到不受支持的媒体类型:
$.post("/ListRequest", {myList: myList}, 'application.JSON')也试过$.post("/ListRequest", {myList: myList}, 'JSON') -
您必须编写您的类,使其与 JSON 匹配,反之亦然。 Spring 在幕后使用 jackson,因此请弄清楚应该如何完成映射并在需要时对其进行修复。
标签: json spring spring-mvc