将JSON数组传递给spring MVC控制器

将JSON数组传递给spring MVC控制器,json,spring,spring-mvc,Json,Spring,Spring Mvc,我尝试将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: myLis

我尝试将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;
    }

}
我不断地发现这个错误: 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:客户端发送的请求在语法上不正确。

您可以尝试

@RequestParam(“myList”)myList tempmyList


@Param myList tempmyList


此外,类名必须以大写字母开头。

尝试将此添加到您的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');
            }
        });

就连我也面临着同样的问题。 我的客户端请求是正确的,并生成了正确的json文件。 但我还是犯了同样的错误

我在pojo类中使用@JsonIgnoreProperties(ignoreUnknown=true)解决了这个错误

请参阅此链接。

打开浏览器的网络控制台,检查请求中实际写入了什么JSON。把它贴在这里。此外,您还需要使用
@RequestBody
而不是
@RequestParam
。我让你查一下原因。我尝试了@RequestBody,但得到了一个不受支持的mediatype错误。JSON看起来也是这样:{“myList”:[{“NAME”:“Blah”,“TYPE”:“TYPE1”,“DATE”:138587000000}}}更改AJAX请求以
application/JSON
的形式发送内容类型。尝试了此操作,但仍然得到不受支持的媒体类型:
$。post(“/ListRequest”,{myList:myList},'application.JSON')
也尝试了
$。post(/ListRequest,{myList:myList},'JSON')
您必须编写与JSON匹配的类,反之亦然。Spring在幕后使用jackson,以便了解应该如何进行映射,并在需要时进行修复。您更改了什么?什么是
@Param
?类名不能以大写字母开头,它们应该以大写字母开头。修复了大写字母,s令人担忧的是,我得到了一个404错误,因为控制器没有返回任何东西,但请求实际上是完全正确的。我想使用这个线程中引用的技术。我的Ajax调用指定了
contentType:'application/json'
dataType:'json'
数据:{“values”:json.stringify(['String1'、'String2'、'String3']}
。在我的控制器中,我将控制器方法参数注释为
@RequestParam List valuesList
。调用了控制器方法,但当我检查
valuesList
中的值时,我看到:
[“String1”
“String2”
“String3”]
!我做错了什么?!好像你在使用GET,我不知道反序列化发生在
@RequestParam
,尝试在post中向你发送数据并在你的控制器中使用
@RequestBody
$.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');
            }
        });