使用Java Spring接收POST数据

时间:2011-08-24 10:49:57

标签: java arrays spring list post

我正在尝试捕获已发布到我的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);

但这也不起作用。

6 个答案:

答案 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;
}