如何在Spring MVC中传递post数组参数

时间:2011-03-22 23:57:18

标签: spring-mvc

我只是想知道如何传递post参数,例如跟随exxcept从html选项,通常我会得到一个语言,如PHP(POST['param'][0]...我相信会工作)

url?param=value1&param=value2&param=value3

我试过了:

@RequestMapping(value="/schedule", method = RequestMethod.POST)
public void action(String[] param)

但是由于某些原因这不起作用......

任何想法都将不胜感激!

6 个答案:

答案 0 :(得分:49)

您可以使用:

@RequestMapping(value="/schedule", method = RequestMethod.POST)
public void action(@RequestParam(value = "param[]") String[] paramValues){...}

它将检索参数paramValues的所有值(在数组param内)(注意value的属性RequestParam:它以[]结束<) / p>

答案 1 :(得分:8)

这应该有效:

@RequestMapping(value="/schedule", method = RequestMethod.POST)
public void action(@RequestParam("param") String[] param)

答案 2 :(得分:5)

如果您知道您的参数名称,请尝试

@RequestMapping(value="/schedule", method = RequestMethod.POST)
public void action(@RequestParam("myParam") String param)

另一种方法是使用当前请求对象:

@RequestMapping(value="/schedule", method = RequestMethod.POST)
public void action(HttpServletRequest request) {
Map parameterMap = request.getParameterMap();
...

}

答案 3 :(得分:5)

如果有人仍在努力解决这个问题,那么就应该这样做:

表单输入:

<input name="myParam" value="1"/>
<input name="myParam" value="4"/>
<input name="myParam" value="19"/>

控制器方法:

   @RequestMapping
    public String deletePlaces(@RequestParam("myParam") Long[] myParams) {

      //myParams will have 3 elements with values 1,4 and 19
    }

这适用于String[] Integer[] Long[],可能更多。 POSTGETDELETE的工作方式相同。

参数名称必须与表单输入中的name标记匹配。没有额外的[]等等。实际上,如果方法参数名称与输入名称相同,则可以省略参数名称,因此我们最终可以使用这样的方法签名:

   @RequestMapping
   public String deletePlaces(@RequestParam Long[] myParams) 

它仍然可以使用

额外的东西: 现在,如果您有域模型,请说Place并且您有PlaceRepository,通过提供Place#id作为输入值,Spring可以为我们查找相关对象。因此,如果我们假设上面的表单输入包含用户ID作为值,那么我们可以简单地将其写入控制器:

public String deletePlaces(@RequestParam Place[] places) {
  //places will be populated with related entries from database!
 }

甜蜜不是吗?

答案 4 :(得分:4)

@RequestMapping(value="/schedule", method = RequestMethod.POST)
public void action(@RequestParam(value = "param[]") String[] paramValues {...}

当您通过jQuery发送例如ajax时,这将起作用:

$.ajax({
    type: "POST",
    data: { param:paramValues }
    ...
});

但是当你只发送包含字符串的单个元素数组时,它包含逗号“foo,baa”,Spring将拆分此String并创建包含2个元素“foo”和“baa”的数组。 所以当你的数组也有一个元素时要小心逗号。

答案 5 :(得分:0)

1,添加一个Java类作为requestBody

public class PostMembers {
    private String[] members;

    public String[] getMembers() {
        return members;
    }

    public void setMembers(String[] members) {
        this.members = members;
    }
}

2,在控制器类中添加一个方法

@PostMapping("")
public List<SomeClass> addMember(@RequestBody PostMembers postMembers) {
// ...
}

现在您的控制器可以获取数组参数了。

3,进行卷曲测试

curl -H "Content-Type:application/json"  \
 -X POST -d '{"members":["item1","item2"]}' \
 http://localhost:8080/api/xxx

或者如果您使用vue

axios.post(someUrl,{
    members:[
       'item1','item2'
    ]
}).then(response =>{
// ...
})