b/w @RequestParam和@QueryParam Anotation有什么区别

use*_*922 18 spring-mvc

之间有什么根本区别@RequestParam@QueryParam

Ser*_*man 39

@QueryParam是一个JAX-RS框架注释,@RequestParam来自Spring.

  • QueryParam来自另一个框架,你提到了Spring.@Flao写道,`@RequestParam`来自Spring,应该在Spring MVC中使用. (2认同)

Gio*_*uri 13

我将尝试对这个问题进行更详细的说明。

让我们先从语义查询参数请求参数,分别@QueryParam@RequestParam

Query Parameter,根据 HTTP 规范以及此注释的 ( @QueryParam) 实现JAX-RS,表示在查询字符串中找到的参数。即在完整请求 URL 中跟在问号后面的字符串。

Request Parameter,根据 HTTP 规范,也根据这个注解的 ( @RequestParam) 实现Spring MVC (org.springframework.web.bind.annotation),表示 HTTP 请求的参数,这里要明确,它没有指定它是哪种类型的参数 - 查询、标头、正文等.


现在让我们谈谈实现本身。

@查询参数

@QueryParam注释属于JAX-RS规范,其中指出

@QueryParam 将 HTTP 查询参数的值绑定到资源方法参数、资源类字段或资源类 bean 属性

这里要注意,是查询参数绑定到资源方法的参数(即查询字符串中的参数)

@RequestParam

@RequestParam另一方面,属于 Spring Framework,它指出

@RequestParam 注释表示方法参数应该绑定到 Web 请求参数。
• 在Spring MVC 中,“请求参数”映射到查询参数、表单数据和多部分请求中的部分。这是因为 Servlet API 将查询参数和表单数据组合到一个称为“参数”的映射中,其中包括请求正文的自动解析。


因此,我认为这些名称可能确实有点误导,但经过深入挖掘后,它们是不言自明的。当您只需要查询参数时尝试使用一个,而当您需要任何请求参数时使用另一个。


小智 12

除了这些在框架中提到的差异之外,一个主要的区别是@RequestParam总是期望值绑定.因此,如果未传递值,则会出错.事实并非如此@QueryParam

要明确提供该选项,请在使用时使用required = false @RequestParam