【问题标题】:Passing array of String in HTML form and submit to Java Spring Controller?以 HTML 形式传递字符串数组并提交给 Java Spring Controller?
【发布时间】:2016-11-10 17:13:17
【问题描述】:

我很难弄清楚如何将一组值传递给RequestParam 中的 JHava 弹簧控制器方法。

我的 HTML 表单如下:

<form method="post">
    <input type="text" name="numbers[]">
    <input type="submit">
</form>

而我的Spring控制器如下:

@RequestMapping(value="/send", method = RequestMethod.POST)
public void sendMessage(String to[]) {
    for(String number: to) {
        System.out.println(number);
    }
}

但是当我运行它时,它显示一个错误:

...不适用于参数

【问题讨论】:

标签: java html arrays spring


【解决方案1】:

问题在于您的输入只是一个字符串字段,因此 Spring 将其转换为字符串,而不是字符串数组。

一种解决方案是在表单中使用相同名称的多个输入。 Spring 自动创建数组并将其传递给控制器​​。

<form method="post">
  <input type="text" name="number">
  <input type="text" name="number">
  <input type="text" name="number">
  <input type="submit">
</form>

控制器中对应的方法是:

public void foo(@RequestParam("number[]") List<String> to) {
    for(String number : to) {
        System.out.println(number);
    }
}

【讨论】:

  • 感谢您简单快速的解释。但是有没有什么方法可以在没有多个同名输入框的情况下实现这一点?
  • 您可以使用 Javascript 和某种 split() 函数从 1 个字符串输入转换数据,然后在执行 POST 之前将结果放入查询参数中。
  • name 属性和@RequestParam 注解中的名称必须相同。带括号或不带括号。
  • @RequestParam("number[]") 应该是@RequestParam("number")
【解决方案2】:

如果有人还在为此苦苦挣扎,那就应该这样做:

表单输入:

<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[] 和可能更多。 POST,GET,DELETE 会以同样的方式工作。

参数名称必须与表单输入中的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!
 }

是不是很甜?

【讨论】:

    猜你喜欢
    • 2016-03-26
    • 2018-11-14
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多