Spring MVC可以处理多值查询参数吗?

时间:2012-03-19 10:25:22

标签: spring-mvc

有了这个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能否将多值param phones转换为String s列表(或其他对象?

感谢。

亚历

3 个答案:

答案 0 :(得分:68)

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

phone=val1&phone=val2&phone=val3

-

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

然后,您可以使用Arrays.asList(..)方法

将其转换为列表

EDIT1:

根据emdadul的建议,最新版本的弹簧也可以如下所示:

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

答案 1 :(得分:6)

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

例如:

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

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

答案 2 :(得分:0)

我对索引查询字符串有问题,例如

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

我也尝试过

MultiValueMap<String, String>
,但是RequestParamMethodArgumentResolver明确寻找MultiValueMap<String, String>忽略索引。这就是为什么我决定让RequestParamMapMethodArgumentResolver处理它的原因。