将JSON数组传递给Spring Controller

时间:2014-08-29 15:29:25

标签: json spring-mvc jackson

我需要将一个对象数组传递给我的控制器。我正在尝试使用@RequestBody,如下例所示:

http://java2practice.com/2013/03/14/how-to-pass-json-object-string-or-jsonarray-string-from-javascript-to-spring-controller/

我在我的项目中复制了这个例子,但每次调用它时都会收到“错误请求”错误。我怀疑这是因为我使用的是Spring 4和Jackson 2,但我不知道如何让它工作。

这应该在这种环境下工作吗?有一个更好的方法吗?

1 个答案:

答案 0 :(得分:1)

是的,这应该适用于那种环境(即使用Spring和Jackson的那些版本!)。当面临一个神秘的错误时,我的目标是将日志设置调到TRACE,以防任何库失败。

我在我的IDE中设置了这个示例(使用Spring4和Jackson2),我立即遇到了一个400"错误请求"错误也是如此。我在org.springframework.webcom.fasterxml.jackson.core上调试了调试设置,发现Jackson2正在吐出异常:

com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of ca.ted.TestController$Person[] out of START_OBJECT token

这是因为JSON被送到jQuery.ajax()电话。我删除了包裹数组的"persons":{}对象,而只发送了数组:

var arr = [ 
            {
                "firstName" : "Ramesh",
                "id" : "id1",
                "lastName" : "Kotha"
            }, 
            {
                "firstName" : "Sathish",
                "id" : "id2",
                "lastName" : "Kotha"
            } 
        ];

我这样做但遇到以下异常:

com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class ca.ted.TestController$Person]: can not instantiate from JSON object (need to add/enable type information?)

原来这是因为Person是我控制器中的内部类。我把它移到了自己的文件ca.ted.Person,一切都很顺利。

希望这有帮助!