В чем разница b/w @RequestParam и @QueryParam Anotation

В чем основное различие между @RequestParam и @QueryParam в контроллере Spring MVC?

Ответ 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 объединяет параметры запроса и данные формы в одну карту, называемую "параметры", что включает в себя автоматический анализ тела запроса.


Поэтому, я думаю, что имена действительно могут быть немного вводящими в заблуждение, но после того, как вы покопаетесь в них немного больше, они говорят сами за себя. Просто старайтесь придерживаться одного, когда вам нужен только параметр запроса, и другого, когда вам нужен любой параметр запроса.