What is the difference between @PathParam and @PathVariable [closed]
Asked Answered
D

7

76

To my knowledge both serve the same purpose. Except that @PathVariable is from Spring MVC and @PathParam is from JAX-RS. Any insights on this?

Dawson answered 3/9, 2015 at 5:20 Comment(3)
possible duplicate of @RequestParam vs @PathVariableTouchy
Suresh, i like your own answer better than the answers below. I think perhaps it's important to note that 1) Spring honors PathParam as well as its own PathVariable, and 2) whenever possible Java's PathParam is preferrable (because you may replace Spring some day with another technology, but as long as you are working with Java...)Grassgreen
Expecting answers regarding cases on when to to use path variable and when to use path parameter.Zora
N
76

@PathVariable and @PathParam both are used for accessing parameters from URI Template

Differences:

  • As you mention @PathVariable is from spring and @PathParam is from JAX-RS.
  • @PathParam can use with REST only, where @PathVariable used in Spring so it works in MVC and REST.

See also: Difference between @RequestParam and @QueryParam Anotation

Norean answered 25/3, 2018 at 2:54 Comment(0)
L
44

QueryParam:

To assign URI parameter values to method arguments. In Spring, it is @RequestParam.

Eg.,

http://localhost:8080/books?isbn=1234

@GetMapping("/books/")
    public Book getBookDetails(@RequestParam("isbn") String isbn) {

PathParam:

To assign URI placeholder values to method arguments. In Spring, it is @PathVariable.

Eg.,

http://localhost:8080/books/1234

@GetMapping("/books/{isbn}")
    public Book getBook(@PathVariable("isbn") String isbn) {
Lupus answered 28/1, 2018 at 7:21 Comment(4)
Is it not request param in your first exampleDawson
Your PathParam heading is misleading because the explanation you have given is of @RequestParam (not PathParam)Nonresident
@Omkar Your explanation is wrong !!! PathParam is javax.ws.rs which is equivalent to Spring's PathVariable. Similarly, QueryParam from javax.ws.rs is equivalent to RequestParamKroo
@ImamBux - thanks for noticing it. Updated the answer.Lupus
M
12

@PathParam is a parameter annotation which allows you to map variable URI path fragments into your method call.

@Path("/library")
public class Library {

   @GET
   @Path("/book/{isbn}")
   public String getBook(@PathParam("isbn") String id) {
      // search my database and get a string representation and return it
   }
}

for more details : JBoss DOCS

In Spring MVC you can use the @PathVariable annotation on a method argument to bind it to the value of a URI template variable for more details : SPRING DOCS

Memphis answered 20/9, 2016 at 12:56 Comment(1)
in other words, it does the same, but @PathVariable is the equivalent to be used in Spring (?)Vitalism
C
1

@PathParam is a parameter annotation which allows you to map variable URI path fragments into your method call.

@PathVariable is to obtain some placeholder from the URI (Spring call it an URI Template)

Catchword answered 21/9, 2016 at 9:15 Comment(0)
M
0

Some can use @PathParam in Spring as well but value will be null when URL request is being made Same time if We use @PathVarriable then if value is not being passed then application will throw error

Militarize answered 12/5, 2020 at 13:1 Comment(0)
P
-2

@PathVariable

@PathVariable it is the annotation, that is used in the URI for the incoming request.

http://localhost:8080/restcalls/101?id=10&name=xyz

@RequestParam

@RequestParam annotation used for accessing the query parameter values from the request.

public String getRestCalls(
@RequestParam(value="id", required=true) int id,
@RequestParam(value="name", required=true) String name){...}

Note

whatever we are requesting with rest call i.e, @PathVariable

whatever we are accessing for writing queries i.e, @RequestParam

Pontus answered 18/9, 2017 at 16:29 Comment(1)
though my question is difference between pathvariable and pathparam. Thank you for the reply .Dawson
H
-2

@PathParam: it is used to inject the value of named URI path parameters that were defined in @Path expression.

Ex:

@GET
@Path("/{make}/{model}/{year}")
@Produces("image/jpeg")
public Jpeg getPicture(@PathParam("make") String make, @PathParam("model") PathSegment car, @PathParam("year") String year) {
        String carColor = car.getMatrixParameters().getFirst("color");

}

@Pathvariable: This annotation is used to handle template variables in the request URI mapping ,and used them as method parameters.

Ex:

     @GetMapping("/{id}")
     public ResponseEntity<Patient> getByIdPatient(@PathVariable Integer id) {
          Patient obj =  service.getById(id);
          return new ResponseEntity<Patient>(obj,HttpStatus.OK);
     }
Hirudin answered 21/12, 2020 at 15:16 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.