Может ли 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 преобразовать многозначный параметр phones
в список String
(или других объектов?
Спасибо.
Алекс
Ответы
Ответ 1
"Массивы" в @RequestParam
используются для привязки нескольких параметров с одинаковым именем:
phone=val1&phone=val2&phone=val3
-
public String method(@RequestParam(value="phone") String[] phoneArray){
....
}
Затем вы можете преобразовать его в список, используя метод Arrays.asList(..)
EDIT1:
Как предлагает emdadul, последняя версия spring может работать так же, как показано ниже:
public String method(@RequestParam(value="phone", required=false) List<String> phones){
....
}
Ответ 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&phone[1]=345
, и у меня работала только обработка с Map<String, String>
. Ни List, ни String [] не обрабатывали его правильно.
Я также пытался @RequestParam("phones[]")
, но RequestParamMethodArgumentResolver явно ищет phones[]
игнорирующие индексы. Вот почему я решил позволить RequestParamMapMethodArgumentResolver справиться с этим.