@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) {...}
}
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.