Reputation: 233
Just curious to know in which scenario we should go for @RequestParam
and @PathVariable
. I know that:
@RequestParam
takes parameter value whereas @PathVariable
takes placeholder value@RequestParam
can be optional (required=false) while making request whereas @PathVariable
value has to be provided. @RequestParam
we have to know the property syntax but for @PathVariable
not requiredIs there any other reason to go for specific one?
Upvotes: 12
Views: 11977
Reputation: 74551
org.springframework.web.bind.annotation.RequestParam
is used to bind Query String. org.springframework.web.bind.annotation.PathVariable
is used to bind URL path. org.springframework.web.bind.annotation.RequestBody
is used to bind HTTP Body.org.springframework.http.RequestEntity
will give you some added flexibility in defining arbitrary HTTP Entity headers along with HTTP Body. Example:
/users # Fetch a list of users
/users?occupation=programmer # Fetch a list of user with filter programmer
/users/123 # Fetch a user who has id 123
you can get side effects. You don’t have to define other URL and other query parameter to achieve basic CRUD functions.You change HTTP method depends on what you want to do.
/users [GET] # Fetch a list of users
/users [POST] # Create new user
/users/123 [PUT] # Update user
/users/123 [DELETE] # remove user
Putting optional parameters in the Template URL will end up getting really messy, So I would recommend to put optional parameter in Query String.
Upvotes: 4
Reputation: 7765
Use @PathVariable
if you want to adhere to 'statefull' URLs.
For Example:-
/customer/:id Customer view/edit page
/customer/ Customer Add page
/customer/list List Customer Page
/customer/:cid/order All order of a Customer
/customer/:cid/order/:oid Specific order of a partucular Customer.
Wisely using Path Variable will result in URL that gives you hint/clue about what the resulting view/page means.
This also lets you support refresh,back & forward operation with no extra effort.
@RequestParams can be used to exatract data which is not passed as path params. Your MVC handler can have combination of two as required.
Upvotes: 13