Chapter 4. @PathParam

@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
   }
}
This lets you embed variable identification in the URIs of your resources. The previous example shows an isbn URI parameter passing information about a particular book we want to access. You can inject into any primitive parameter type, a String, any Java object that takes a String parameter, or a static valueOf method that takes a String parameter. For example, if we wanted isbn to be a real object, we could write:

   @GET
   @Path("/book/{isbn}")
   public String getBook(@PathParam("isbn") ISBN id) {...}


   public class ISBN {
      public ISBN(String str) {...}
   }

Or instead of a public String constructor, we could have a valueOf method:
  public class ISBN {
     
     public static ISBN valueOf(String isbn) {...}
  }

4.1. Advanced @PathParam and Regular Expressions

There are several more complicated uses of @PathParams.
You are allowed to specify one or more @PathParams embedded in one URI segment. For example:
1. @Path("/aaa{param}bbb")
2. @Path("/{name}-{zip}")
3. @Path("/foo{name}-{zip}bar")
So, a URI of the form "/aaa111bbb" would match the first specified parameter. "/bill-02115" would match the second, and "foobill-02115bar" would match the third.
In Section 3.1, “@Path and regular expression mappings”, we mentioned that regular expressions can be used within @Path values, like so:

@GET
@Path("/aaa{param:b+}/{many:.*}/stuff")
public String getIt(@PathParam("param") String bs, @PathParam("many") String many) {...}

With the @Path defined here, the request GET /aaabb/some/stuff would have a "param" value of bb, and a "many" value of some. The request GET /aaab/a/lot/of/stuff would have a "param" value of b, and a "many" value of a/lot/of.