Пример URL:
../search/?attr1=value1&attr2=value2&attr4=value4
Я не знаю имен attr1, att2 и attr4.
Я хотел бы иметь возможность делать что-то подобное (или подобное, все равно, только если у меня есть доступ к имени параметра Map of request -> value:
@RequestMapping(value = "/search/{parameters}", method = RequestMethod.GET)
public void search(HttpServletRequest request,
@PathVariable Map<String,String> allRequestParams, ModelMap model)
throws Exception {//TODO: implement}
Как я могу добиться этого с Spring MVC?
java
spring
spring-mvc
MDB
источник
источник
@RequestParam MultiValueMap<String, String>
import org.springframework.ui.ModelMap;
.ModelMap
не требуется для получения всех параметров запроса в виде карты; это просто деталь, специфичная для кода OP.редактировать
Было отмечено, что существует ( по крайней мере, начиная с версии 3.0 ) механизм Spring Spring MVC, с помощью которого можно получить эти данные. Я не буду подробно описывать это здесь, так как это ответ другого пользователя. Подробности смотрите в ответе @ AdamGent , и не забудьте поднять голос.
В документации Spring 3.2 этот механизм упоминается как на
RequestMapping
странице JavaDoc, так и наRequestParam
странице JavaDoc, но ранее он упоминается только наRequestMapping
странице. В документации 2.5 нет упоминания об этом механизме.Это, вероятно, предпочтительный подход для большинства разработчиков, поскольку он удаляет (по крайней мере, это) привязку к
HttpServletRequest
объекту, определенному jar-сервлетом-api./Редактировать
Вы должны иметь доступ к строке запроса запросов через
request.getQueryString()
.В дополнение к getQueryString параметры запроса также могут быть получены из request.getParameterMap () в виде Map.
источник
@RequestParam
с удовольствием примуMap
в качестве параметра (см. мой ответ).@RequestParam
на ,Map<String,String>
чтобы получить все параметры строки запроса. И , пожалуйста, не чувствую себя так вознегодовал над ответами , которые вы видите здесь ... они не что плохо :) static.springsource.org/spring/docs/3.1.x/javadoc-api/org/...@RequestParam Map<>
путь не был сделан. Я немного раздражен тем, что во многих современных проектах, которые я видел в Spring MVC (весна 3.1 и выше), они добавят HttpServletRequest и HttpServletResponse в каждый метод. И кажется, потому что младшие разработчики используют StackOverflow и Google вместо того, чтобы смотреть на документ. Это затрудняет переключение проекта Spring с api сервлета на Netty API. JAX-RS имеет похожие проблемы злоупотребления, но в гораздо меньшей степени.Объект HttpServletRequest уже предоставляет карту параметров. Смотрите request.getParameterMap () для более подробной информации.
источник
Вы можете просто использовать это:
Это должно работать нормально
источник
Вот простой пример получения параметров запроса на карте.
В этом случае он свяжет значение studentName и studentEmail с переменными name и email соответственно.
источник
Используйте
org.springframework.web.context.request.WebRequest
в качестве параметра в методе контроллера, он предоставляет методgetParameterMap()
, преимущество в том, что вы не привязываете свое приложение к сервлетному API, WebRequest является примером объекта контекста шаблона JavaEE.источник
Есть два интерфейса
org.springframework.web.context.request.WebRequest
org.springframework.web.context.request.NativeWebRequest
Разрешает общий доступ к параметрам запроса, а также
request/session
доступ к атрибутам без привязки к собственному сервлету / портлету API .Напр .:
PS Есть документы об аргументах, которые можно использовать в качестве параметров контроллера.
источник
String[]
в ценности? Я должен индексировать его до 0, чтобы получить значение.key=val1,val2
илиkey=val1&key=val2
(если я правильно помню, Spring поддерживает обе эти нотации), поэтому вы получите массив с 2 элементамиЯ могу опоздать на вечеринку, но, насколько я понимаю, вы ищете что-то вроде этого:
источник
Все параметры будут сохранены в
jsonObject
.источник
Существует принципиальное различие между параметрами запроса и параметрами пути. Это выглядит так:
www.your_domain?queryparam1=1&queryparam2=2
- параметры запроса.www.your_domain/path_param1/entity/path_param2
параметры пути.Что меня удивило, так это то, что в мире Spring MVC многие люди путают одного с другим. Хотя параметры запроса больше похожи на критерии поиска, параметры пути, скорее всего, будут однозначно идентифицировать ресурс. Сказав это, это не означает, что вы не можете иметь несколько параметров пути в вашем URI, потому что структура ресурса может быть вложенной. Например, скажем, вам нужен конкретный автомобильный ресурс конкретного человека:
www.my_site/customer/15/car/2
- ищу вторую машину 15-го покупателя.Каким будет сценарий использования всех параметров пути на карте? Параметры пути не имеют «ключа», когда вы смотрите на сам URI, эти ключи внутри карты будут взяты из вашей аннотации @Mapping, например:
С точки зрения HTTP / REST параметры пути не могут быть спроецированы на карту. На мой взгляд, все дело в гибкости Spring и их желании удовлетворить любые прихоти разработчиков.
Я бы никогда не использовал карту для параметров пути, но она может быть весьма полезна для параметров запроса.
источник