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
@PathParam
s.
You are allowed to specify one or more
@PathParam
s 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
.