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

Fur*_*lon 40 spring-mvc

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

url?param=value1&param=value2&param=value3
Run Code Online (Sandbox Code Playgroud)

我试过了:

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

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

任何想法将不胜感激!

kal*_*ard 49

你可以用这个:

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

将检索的所有值(内部阵列paramValues参数的)param(注意属性valueRequestParam:它与结束[])

  • 顺便说一下,当你在jquery中发送ajax param时,不要忘记使数组param名称也以"[]"结尾. (3认同)
  • @Chandz我认为`@RequestParam MultiValueMap <String,字符串> params`检索请求的所有参数,不仅是需要的参数`param`的值,这样你就可以使用'MultiValueMap`对象和搜索它是参数`param`的所有​​发生.这可能比`@RequestParam(value ="param []")更难处理. (2认同)

spl*_*onk 8

这应该工作:

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

  • 这确实有效,但与问题要求略有不同 - 这将映射一个以数组作为值的SINGLE参数; 但是MULTIPLE参数(可能是动态的和难以预料的名称)不能像这样映射. (3认同)

Ric*_*coZ 5

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

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

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

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

}
Run Code Online (Sandbox Code Playgroud)


Ant*_*sss 5

如果有人还在努力,那就应该这样做:

表格输入:

<input name="myParam" value="1"/>
<input name="myParam" value="4"/>
<input name="myParam" value="19"/>
Run Code Online (Sandbox Code Playgroud)

控制器方法:

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

      //myParams will have 3 elements with values 1,4 and 19
    }
Run Code Online (Sandbox Code Playgroud)

这个工作原理相同String[] Integer[] Long[],可能更多.POST,GET,DELETE将工作方式相同.

参数名称必须与name表单输入中的标记匹配.没有额外[]需要等等.事实上,如果方法参数名称与输入名称相同,则可以省略参数名称,因此我们最终可以得到方法签名,如下所示:

   @RequestMapping
   public String deletePlaces(@RequestParam Long[] myParams) 
Run Code Online (Sandbox Code Playgroud)

它仍然有效

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

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

甜蜜不是吗?