Я отправляю некоторые параметры из формы таким образом:
myparam[0] : 'myValue1'
myparam[1] : 'myValue2'
myparam[2] : 'myValue3'
otherParam : 'otherValue'
anotherParam : 'anotherValue'
...
Я знаю, что могу получить все параметры в методе контроллера, добавив такой параметр, как
public String controllerMethod(@RequestParam Map<String, String> params){
....
}
Я хочу привязать параметры myParam [] (а не другие) к списку или массиву (всему, что сохраняет порядок индекса), поэтому я пробовал использовать такой синтаксис:
public String controllerMethod(@RequestParam(value="myParam") List<String> myParams){
....
}
и
public String controllerMethod(@RequestParam(value="myParam") String[] myParams){
....
}
но ни один из них не связывает myParams. Даже когда я добавляю значение на карту, он не может привязать параметры:
public String controllerMethod(@RequestParam(value="myParam") Map<String, String> params){
....
}
Есть ли какой-либо синтаксис для привязки некоторых параметров к списку или массиву без необходимости создавать объект как @ModelAttribute с атрибутом списка в нем?
Спасибо
HandlerMethodInvoker.resolveRequestParam
всегда получает только первое значениеmethod = RequestMethod.GET
илиmethod = RequestMethod.POST
? Если.GET
@RequestParam List<String> groupVal
выполнено?groupVal=kkk,ccc,mmm
успешно ( Spring Boot )Ответы:
Массивы
@RequestParam
используются для привязки нескольких параметров с одинаковым именем:Если вам нужно привязать
@ModelAttribute
индексированные параметры -style, я думаю, вам@ModelAttribute
все равно нужно .источник
Или вы можете просто сделать это так:
Это работает, например, для таких форм:
Это самое простое решение :)
источник
List<String>
через это. Также есть возможность получить Java Bean , какList<MyBean>
Просто дополняя то, что сказал Donal Fellows, вы можете использовать List с @RequestParam
Надеюсь, поможет!
источник
Подписка на то, что сказал базилик в комментарии к самому вопросу, если
method = RequestMethod.GET
можно@RequestParam List<String> groupVal
.Тогда вызвать сервис со списком параметров очень просто:
источник
Один из способов сделать это (хакерским способом) - создать класс-оболочку для
List
. Как это:Тогда подпись вашего метода контроллера будет выглядеть так:
Нет необходимости использовать аннотацию
@RequestParam
или,@ModelAttribute
если имя коллекции, которое вы передаете в запросе, совпадает с именем поля коллекции класса-оболочки, в моем примере параметры вашего запроса должны выглядеть следующим образом:источник
Для меня не было очевидно, что, хотя вы можете принять коллекцию в качестве параметра запроса, но на стороне потребителя вам все равно придется передавать элементы коллекции как значения, разделенные запятыми .
Например, если API на стороне сервера выглядит так:
Непосредственная передача коллекции в RestTemplate в качестве RequestParam, как показано ниже, приведет к повреждению данных.
Вместо этого вы можете использовать
Полный пример можно найти здесь , надеюсь, это избавит кого-то от головной боли :)
источник
Измените значение скрытого поля с помощью переключателя флажка, как показано ниже ...
HTML:
Автор сценария:
источник