我正在尝试捕获已发布到我的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)
尝试使用ArrayList而不是List。许多工具都存在这样的问题,因此当需要List时,他们不知道要实例化哪个类。
答案 1 :(得分:0)
指定所需数组的具体实现,例如public @ResponseBody Object foo(ArrayList<Integer> fooIds)
或定义转换器。
答案 2 :(得分:0)
尝试将方法签名更改为public @ResponseBody Object foo(int[] fooIds)
答案 3 :(得分:0)
Could not instantiate bean class [java.util.List]: Specified class is an interface.
表示您应该使用实现List的类,例如ArrayList
尝试写作
new List<Object>() // the compiler will complain
new ArrayList<Object>() // the compiler will not complain
答案 4 :(得分: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',
);
答案 5 :(得分:0)
我认为您的代码中唯一的问题是您应该使用@RequestParam注释List
@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;
}