Привязка списка в @RequestParam
Я посылаю некоторые параметры из формы таким образом:
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 с атрибутом списка в нем?
спасибо
6 ответов:
массивы
@RequestParamиспользуются для привязки нескольких одноименных параметров:myparam=myValue1&myparam=myValue2&myparam=myValue3Если вам нужно, чтобы связать
@ModelAttribute-стиль индексированных параметров, я думаю, вам нужен@ModelAttributeв любом случае.
или вы могли бы просто сделать это таким образом:
public String controllerMethod(@RequestParam(value="myParam[]") String[] myParams){ .... }это работает, например, для таких форм:
<input type="checkbox" name="myParam[]" value="myVal1" /> <input type="checkbox" name="myParam[]" value="myVal2" />Это самое простое решение :)
просто дополняя то, что сказал Донал Феллоуз, вы можете использовать List с @RequestParam
public String controllerMethod(@RequestParam(value="myParam") List<ObjectToParse> myParam){ .... }надеюсь, что это помогает!
один из способов, которым вы могли бы сделать это (по-хакерски), - создать класс-оболочку для
List. Вот так:class ListWrapper { List<String> myList; // getters and setters }тогда ваша подпись метода контроллера будет выглядеть так:
public String controllerMethod(ListWrapper wrapper) { .... }нет необходимости использовать
@RequestParamили@ModelAttributeаннотация если имя коллекции, которое вы передаете в запросе, совпадает с именем Поля коллекции класса-оболочки, в моем примере ваши параметры запроса должны выглядеть так:myList[0] : 'myValue1' myList[1] : 'myValue2' myList[2] : 'myValue3' otherParam : 'otherValue' anotherParam : 'anotherValue'
подписавшись на то, что Василий сказал в комментарии к самому вопросу, если
method = RequestMethod.GETможно использовать@RequestParam List<String> groupVal.тогда вызов службы со списком параметров так же просто, как:
API_URL?groupVal=kkk,ccc,mmm
изменить значение скрытого поля с переключателем флажка, как показано ниже...
HTML:
<input type='hidden' value='Unchecked' id="deleteAll" name='anyName'> <input type="checkbox" onclick="toggle(this)"/> Delete Allсценарий:
function toggle(obj) {`var $input = $(obj); if ($input.prop('checked')) { $('#deleteAll').attr( 'value','Checked'); } else { $('#deleteAll').attr( 'value','Unchecked'); } }
Comments