What is the difference b/w @RequestParam and @QueryParam Anotation

前端 未结 4 765
逝去的感伤
逝去的感伤 2020-12-28 15:10

What is main difference between @RequestParam and @QueryParam in Spring MVC controller?

相关标签:
4条回答
  • 2020-12-28 15:55

    In addition to above another difference I observed is QueryParam do not translate parameters values to List type however RequestParam does.

    What I mean is "@RequestParam("para") List param" is able to convert comma separated param values to List, @QueryParam fails to translate this.

    0 讨论(0)
  • 2020-12-28 16:02

    @QueryParam is a JAX-RS framework annotation and @RequestParam is from Spring.

    0 讨论(0)
  • 2020-12-28 16:05

    Apart from these mentioned differences in framework, one major difference is @RequestParam will always expect a value to bind. Hence, if value is not passed, it will give error. This is not the case in @QueryParam

    To explicitly give the option, use required = false while using @RequestParam

    0 讨论(0)
  • 2020-12-28 16:12

    I'll try to shed some more detailed light on this question.

    Let's start with semantics of Query Parameter vs. Request Parameter, respectively @QueryParam vs. @RequestParam

    Query Parameter, according to the HTTP Specification and also according to this annotation's (@QueryParam) implementation JAX-RS, represents the parameter found in query string. i.e. the string which follows the question-mark in the full request URL.

    Request Parameter, according to the HTTP Specification and also according to this annotation's (@RequestParam) implementation Spring MVC (org.springframework.web.bind.annotation), represents the parameter of HTTP request, and to be clear here, it doesn't specify which type of parameter it is - query, header, body or etc.


    Now let's talk about implementations per se.

    @QueryParam

    @QueryParam annotation belongs to JAX-RS specification, which states, that:

    @QueryParam Binds the value(s) of a HTTP query parameter to a resource method parameter, resource class field, or resource class bean property

    Pay attention here, it's query parameter which is bound to resource method's parameter (i.e. parameter in query string)

    @RequestParam

    @RequestParam on the other hand, belongs to Spring Framework, which states, that:

    @RequestParam annotation indicates that a method parameter should be bound to a web request parameter.
    • In Spring MVC, "request parameters" map to query parameters, form data, and parts in multipart requests. This is because the Servlet API combines query parameters and form data into a single map called "parameters", and that includes automatic parsing of the request body.


    Therefore, I think the names may be indeed a little bit misleading, but after digging in a little bit more, they are quite self-explanatory. Just try to stick with one when you want only query parameter and with another when you want any request parameter.

    0 讨论(0)
提交回复
热议问题