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

时间:2014-11-03 07:23:19

标签: spring-mvc

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

4 个答案:

答案 0 :(得分:36)

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

答案 1 :(得分:9)

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

中的情况并非如此

要明确提供该选项,请在使用@RequestParam

时使用required = false

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我将尝试更详细地阐明这个问题。

让我们从查询参数请求参数分别为@QueryParam@RequestParam

的语义开始 根据HTTP规范以及此批注(@QueryParam)实现JAX-RS

查询参数表示在查询字符串中找到的参数。即完整请求网址中问号后的字符串。

请求参数,根据HTTP规范以及此注释的(@RequestParam)实现Spring MVC (org.springframework.web.bind.annotation),表示HTTP请求的参数,在此处需要明确说明,它没有指定参数的类型-查询,标头,正文等。


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

@QueryParam

@QueryParam注释属于JAX-RS规范,该规范states,即:

  

@QueryParam将HTTP查询参数的值绑定到资源   方法参数,资源类字段或资源类Bean   财产

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

@RequestParam

另一方面,

@RequestParam属于Spring Framework,states属于:

  

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


因此,我认为这些名称可能确实有些误导,但是在深入研究之后,它们是不言而喻的。当您只想查询参数时,尝试坚持一个,而当您想要任何请求参数时,尝试坚持另一个。