【问题标题】:Can Spring MVC handle multivalue query parameter?Spring MVC 可以处理多值查询参数吗?
【发布时间】:2012-03-19 10:25:22
【问题描述】:

有这个http://myserver/find-by-phones?phone=123&phone=345 请求,是否可以处理这样的事情:

@Controller
public class Controller{
    @RequestMapping("/find-by-phones")
    public String find(List<String> phones){
       ...
    }
}

Spring MVC 能否将多值参数 phones 转换为 Strings(或其他对象)的列表?

谢谢。

亚历克斯

【问题讨论】:

  • find(@RequestParam(required=false, value="phone") List&lt;String&gt; phones) 应该可以工作。这适用于url?phone=123&amp;phone=345,也适用于url?phone=123,345null 参数值,如urlurl?phone= 我希望这有助于任何寻找此解决方案的人:)
  • 如果您有多个参数,所有参数都可以有多个值,请使用 MultiValueMap。见stackoverflow.com/questions/22398892/…

标签: spring-mvc


【解决方案1】:

@RequestParam中的“数组”用于绑定多个同名参数:

phone=val1&phone=val2&phone=val3

-

public String method(@RequestParam(value="phone") String[] phoneArray){
    ....
}

然后您可以使用Arrays.asList(..) 方法将其转换为列表

编辑1:

根据 emdadul 的建议,最新版本的 spring 也可以像下面这样:

public String method(@RequestParam(value="phone", required=false) List<String> phones){
    ....
}

【讨论】:

  • 如果没有一个参数,phoneArray 是空数组还是空数组?
  • Spring 可以将值直接放入列表中:@RequestParam(value="phone") List&lt;String&gt; phones。不确定是否/何时更改,但它适用于 Spring 3.0.5。
  • @Nailgun 您可以设置某种适当的默认参数并生成一个空数组还是只需要处理空值?谢谢
  • 表单元素名称是 phone[ ] 还是 phone 还是 phone[0],phone[1] .....?我有 25 个 mcq 问题,每个问题有 4 个单选按钮。
  • 元素名称将是电话
【解决方案2】:

Spring 可以将查询参数直接转换为List 甚至Set

例如:

 @RequestParam(value = "phone", required = false) List<String> phones

 @RequestParam(value = "phone", required = false) Set<String> phones

【讨论】:

    【解决方案3】:

    我遇到了索引查询字符串的问题,例如

    http://myserver/find-by-phones?phone[0]=123&amp;phone[1]=345
    
    并且只处理
    MultiValueMap&lt;String, String&gt;
    为我工作。 List 或 String[] 都没有正确处理它。

    我也试过了

    @RequestParam("phones[]")
    RequestParamMethodArgumentResolver 正在明确寻找phones[] 忽略索引。所以这就是为什么我决定让RequestParamMapMethodArgumentResolver 处理它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      • 2014-04-17
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      相关资源
      最近更新 更多