В чем основное различие между @RequestParam
и @QueryParam
в контроллере Spring MVC?
В чем разница b/w @RequestParam и @QueryParam Anotation
Ответ 1
Помимо упомянутых различий в структуре, одним из основных отличий является @RequestParam
который всегда будет ожидать привязки значения. Следовательно, если значение не передано, оно выдаст ошибку. Это не так в @QueryParam
Чтобы явно @RequestParam
параметр, используйте required = false при использовании @RequestParam
Ответ 2
@QueryParam
является аннотацией JAX-RS, а @RequestParam
- Spring.
Ответ 3
В дополнение к вышесказанному, я заметил еще одно отличие: QueryParam не переводит значения параметров в тип List, как это делает RequestParam.
Я имею в виду, что "@RequestParam (" para ") List param" способен преобразовывать значения параметров через запятую в List, @QueryParam не может это преобразовать.
Ответ 4
Я постараюсь пролить более подробный свет на этот вопрос.
Давайте начнем с семантики " Параметр запроса против параметра запроса", соответственно @QueryParam
и @RequestParam
Параметр запроса в соответствии со спецификацией HTTP, а также в соответствии с реализацией JAX-RS
этой аннотации (@QueryParam
) представляет параметр, найденный в строке запроса. т.е. строка, которая следует за знаком вопроса в URL полного запроса.
Параметр запроса в соответствии со спецификацией HTTP, а также в соответствии с реализацией этой аннотации (@RequestParam
) Spring MVC (org.springframework.web.bind.annotation)
представляет параметр HTTP-запроса, и, чтобы быть понятным здесь, он не укажите, какой это тип параметра - запрос, заголовок, тело и т.д.
Теперь давайте поговорим о реализации как таковой.
@QueryParam
Аннотация @QueryParam
относится к JAX-RS
, которая гласит:
@QueryParam Привязывает значение (я) параметра HTTP-запроса к параметру метода ресурса, полю класса ресурса или свойству компонента класса ресурса
Обратите внимание, это параметр запроса, который привязан к параметру метода ресурса (то есть параметру в строке запроса).
@RequestParam
@RequestParam
с другой стороны, принадлежит Spring Framework, который утверждает, что:
Аннотация @RequestParam указывает, что параметр метода должен быть связан с параметром веб-запроса.
• В Spring MVC "параметры запроса" отображаются на параметры запроса, данные формы и детали в многокомпонентных запросах. Это связано с тем, что Servlet API объединяет параметры запроса и данные формы в одну карту, называемую "параметры", что включает в себя автоматический анализ тела запроса.
Поэтому, я думаю, что имена действительно могут быть немного вводящими в заблуждение, но после того, как вы покопаетесь в них немного больше, они говорят сами за себя. Просто старайтесь придерживаться одного, когда вам нужен только параметр запроса, и другого, когда вам нужен любой параметр запроса.