Difference Between @PathVariable & @RequestParam

Whenever we start working on API design we always have few things in mind , What I have to take as PathVariable and which as RequestParam.

Difference Between @PathVariable & RequestParam

Most of the people/developers don’t even know what exactly @PathVariable is and what @RequestParam, and Importantly when to use them, In this Article, we will talk about What is PathVariable & RequestParam and when to use which.

What is @PathVariable?

@PathVariable is an Annotation used while creating APIs , It is a URI Placeholder which goes in URI of the API and this template will be replaced with the actual value of it.
Example – /customer/{customerId}/address

public ResponseEntity<Address> getCustomerAddress(@PathVariable("customerId") Long id )
          // your code goes here


Here {customerId} is treated as PathVariable in controller

When to use @PathVariable?

The Most Important point to understand is when to use @PathVariable?

  • @PathVariable is used when we have to implicate mandatory parameter and we want to pass as a URI only
  • When we want the API to be self-explanatory for the external interface to understand it 
    Ex – /customer/1/address = this is showing that this API will return the address of the customer having id 1

Also learn: CRUD Operation in Spring boot

What is @RequestParam?

@RequestParam is used to handle one or more dynamic value passed by API and which need to be required by the controller method to do specific tasks.

We can consider @RequestParam as a query param we passed in Servelet .

Example – “/customer?customerId=1

here customerId=1 is the requestParam we are passing in API

If we want to send more than one request param we will send it like below 


When to use RequestParam?

@RequestParam is used when we want a parameter to be optional. we can also make the parameter as mandatory but by default, the parameter is considered as Mandatory.

public ResponseEntity<Customer> getCustomer(@RequestParam("customerId") Long id ){
      // your code goes here 

With Optional Request Param, it will be 

public ResponseEntity<Customer> getCustomer(@RequestParam(value="customerId" , required=false) Long id ){
      // your code goes here 


I hope this will be helpful for you guys, If you have any issue do let us know or leave us a comment below.






You may also like...

1 Response

  1. I precisely wanted to thank you so much once more. I do not know the things that I could possibly have created without the type of points contributed by you over my theme. It previously was the frustrating concern for me, but taking note of your professional approach you treated it took me to jump with fulfillment. I’m happier for this help as well as trust you really know what a powerful job you were putting in teaching many people through your site. I am certain you’ve never encountered all of us.

Leave a Reply

Your email address will not be published. Required fields are marked *