Подтвердить что ты не робот

Может ли 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 (или других объектов?

Спасибо.

Алекс

4b9b3361

Ответ 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 справиться с этим.