【问题标题】:What is the difference b/w @RequestParam and @QueryParam Anotation@RequestParam 和 @QueryParam 注解有什么区别
【发布时间】:2014-12-29 19:59:24
【问题描述】:

Spring MVC 控制器中@RequestParam@QueryParam 的主要区别是什么?

【问题讨论】:

  • 它们在功能上是相同的:它们允许您将命名的 HTTP 参数的值绑定到带注释的变量。话虽如此,这个问题非常广泛,因此如果您想要更有用的答案,则必须指定更多细节。
  • 我的问题是关于它们在spring mvc控制器中的使用......所以请简要描述......

标签: spring-mvc


【解决方案1】:

@QueryParamJAX-RS 框架注解,@RequestParam 来自 Spring

【讨论】:

  • 请同时指定在 spring mvc 模型控制器中我必须使用哪一个(两者中的一个)
  • QueryParam 来自另一个框架,您提到的是 Spring。 @Flao 写道,@RequestParam 来自 Spring,应该在 Spring MVC 中使用。
  • 但我看到了许多 Spring MVC 控制器示例,其中我们同时使用了(@QueryParam 和 @RequestParam 注释)类型的注释。这就是为什么我的问题是当...时应该使用哪一个。
  • 能否提供他们的链接?
【解决方案2】:

除了这些提到的框架差异之外,一个主要的差异是@RequestParam 将始终期望绑定一个值。因此,如果未传递值,则会出错。 @QueryParam不是这样的

要明确给出选项,请在使用 @RequestParam 时使用 required = false

【讨论】:

  • 另外,@RequestParam 是 Spring Framework 特定的,不需要额外的依赖项,当然除了 web 相关。而@QueryParam 属于 RESTful API for Web Service,因此具有 jsr311-api 的依赖关系。
【解决方案3】:

除了上述之外,我观察到的另一个区别是 QueryParam 不会将参数值转换为 List 类型,但 RequestParam 会。

我的意思是“@RequestParam("para") List param”能够将逗号分隔的参数值转换为 List,@QueryParam 无法翻译。

【讨论】:

    【解决方案4】:

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

    让我们从Query Parameter vs. Request Parameter的语义开始,分别是@QueryParam vs. @RequestParam

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

    请求参数,根据HTTP规范,也根据这个注解的(@RequestParam)实现Spring MVC (org.springframework.web.bind.annotation),代表HTTP请求的参数,这里要清楚,它不是t 指定它是哪种类型的参数 - 查询、标题、正文等。


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

    @QueryParam

    @QueryParam注解属于JAX-RS规范,其中states,即:

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

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

    @RequestParam

    另一方面,@RequestParam 属于 Spring Framework,states,即:

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


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-18
      • 2018-05-05
      • 1970-01-01
      • 2019-01-08
      • 2020-08-10
      • 1970-01-01
      • 2019-05-31
      相关资源
      最近更新 更多