2012-09-18 23 views
2

我尝试发送在表单的请求:结合作为请求参数的POJO的Array

list=Apple1&list=Apple2&list=Apple3 

而苹果其在JSON序列复杂对象:

{"param1":"value1", "param2":"value2"} 

我所限定的在Spring调度的Servlet收到这样的请求,用以下方法:

request(@RequestParam("list") POJO[] pojos){ 
//handle request 
} 

这是没有问题的派单POJO像

request(@RequestParam("single") POJO pojos){ 
//handle request 
} 

,但只要我尝试发射阵列春这样的方法是死于与像一个例外:

java.lang.NoSuchMethodException: [Lmy.package.Apple;.<init>() 

我怎么能教调度servlet来正确反序列化数组? 感谢您帮助

+0

使用'@ RequestBody'并传递请求正文为json – Kevin

+0

不,这对我不起作用,因为我使用的方法有多个参数,所以如下所示:request(@RequestParam POJO [] newArray,@ RequestParam POJO [] oldArray)应该是可能的。 – joecks

回答

2

当我将@RequestParam注释添加到我的调度程序servlet实现的接口而不是调度程序servlet本身时,出现此错误。在这种情况下,Spring会忽略注释并尝试直接实例化苹果数组,那么会导致您提供的错误消息:java.lang.NoSuchMethodException: [Lmy.package.Apple;.<init>()

+0

令人惊讶的是,我有一个类似的设置。一个接口,我定义了RequestParam注解,这对Spring来说实际上没有问题,但是当涉及到解组时,Spring会以某种方式出错,并且需要在实现中额外提供注释,这太乱了! – joecks

1

你的手段引擎盖下您的应用希望的异常Apple具有无参数的构造函数,并未能找到它(Oracle's Troubleshooting page后):

,则抛出,因为零参数 构造函数被请求并尝试传递一个参数。 如果构造函数传递了错误类型的参数 ,则会抛出同样的异常。

$ java ConstructorTroubleAgain int 
java.lang.NoSuchMethodException: ConstructorTroubleAgain.<init>(int) 
     at java.lang.Class.getConstructor0(Class.java:2706) 
     at java.lang.Class.getConstructor(Class.java:1657) 
     at ConstructorTroubleAgain.main(ConstructorTroubleAgain.java:26) 

这可能意味着什么......。杰克逊从JSON字符串反序列化到苹果是否工作良好?你的Apple对象是如何创建的? Apple1是否正确转义了字符串?也可以用你

list[]=Apple1&list[]=Apple2&list[]=Apple3 

request(@RequestParam("list[]") Apple[] apples) 

尝试,因为我最后一次发现春天没有处理好数组,如果他们没有[]一部分。

+0

不幸的名单[]没有工作! ( – joecks

+0

)'Apple'类没有任何参数的构造函数和设置符号? – Xaerxess

+0

是的,我忘了提到这一点,但是由于我知道这可能是一个问题 – joecks