2011-08-24 63 views
0

我试图赶上已发到我的Java控制器与代码的数组如下所示:后接收的数据与Java春天

@RequestMapping(method=RequestMethod.POST, value="/json/foo.json") 
public @ResponseBody Object foo(List<Integer> fooIds) 
{ 
    for (Integer id : fooIds) 
    { 
     fooService.delete(id); 
    } 
    return null; 
} 

不过,我不断收到以下错误:

Could not instantiate bean class [java.util.List]: Specified class is an interface 

我张贴的阵列设置为(在PHP)如下:

$array = array(
    "fooIds[0]" => 1, 
    "fooIds[1]" => 2, 
    "fooIds[2]" => 3, 
    "fooIds[3]" => 4, 
    "fooIds[4]" => 5, 
); 

本来我想:

$array = array(1,2,3,4,5); 

但这也没有工作。

+0

不要更改标题为' [解决]',接受一个答案,将其标记为已解决 –

+0

我不能接受我自己的答案两天......所以我将其标记为解决临时措施。 – diggersworld

回答

0

我也得工作用以下代码:

@RequestMapping(method=RequestMethod.POST, value="/json/foo.json") 
public @ResponseBody Object foo(@RequestParam("ids") int[] fooIds) 
{ 
    for (Integer id : fooIds) 
    { 
     fooService.delete(id); 
    } 
    return null; 
} 

该阵列然后设置这样的:

$array = array(
    'fooIds' => '1,2,3,4,5', 
); 
0

尝试ArrayList而不是List。许多工具都有这样的问题,所以当预期List时,他们不知道要实例化哪个类。

0

指定您想要的数组的具体实现,如public @ResponseBody Object foo(ArrayList<Integer> fooIds)或定义一个转换器。

+0

这给了我一个ArrayList变量,但它仍然是空的。 – diggersworld

0

尝试你的方法的签名更改为public @ResponseBody Object foo(int[] fooIds)

+0

调试器在我尝试时显示fooIds为空。 – diggersworld

0
Could not instantiate bean class [java.util.List]: Specified class is an interface. 

表明您应该使用例如ArrayList的一个类实现列表

尝试写

new List<Object>() // the compiler will complain 
new ArrayList<Object>() // the compiler will not complain 
+0

使用ArrayList停止错误...但数组本身仍为空。 – diggersworld

0

我想在你的代码的唯一问题是,你应该跟标注的@RequestParam名单

@RequestMapping(method=RequestMethod.POST, value="/json/foo.json") 
public @ResponseBody Object foo(@RequestParam("ids") List<Integer> fooIds) 
{ 
    for (Integer id : fooIds) 
    { 
     fooService.delete(id); 
    } 
    return null; 
}