JBoss.orgCommunity Documentation

Chapter 4. Using @Path and @GET, @POST, etc.

public class Library {

   public String getBooks() {...}

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

   public void addBook(@PathParam("isbn") String id, @QueryParam("name") String name) {...}

   public void removeBook(@PathParam("id") String id {...}

In the class above, the RESTEasy servlet is configured and reachable at a root path of http://myhost.com/services. The requests handled by class, Library, are:

The @jakarta.ws.rs.Path annotation must exist on either the class and/or a resource method. If it exists on both the class and method, the relative path to the resource method is a concatenation of the class and method.

In the @jakarta.ws.rs package there are annotations for each HTTP method. @GET, @POST, @PUT, @DELETE, and @HEAD. Place these on public methods that you want to map to that certain kind of HTTP method. As long as there is a @Path annotation on the class, a @Path annotation is not required on the method you are mapping. There can be more than one HTTP method as long as they can be distinguished from other methods.

When a @Path annotation is on a method without an HTTP method, these are called JAXRSResourceLocators.

4.1. @Path and regular expression mappings

The @Path annotation is not limited to simple path expressions. Regular expressions can be inserted into a @Path's value. For example:

public class MyResource {

   public String get() {...}

The following GETs will route to the getResource() method:

GET /resources/stuff
GET /resources/foo/stuff
GET /resources/on/and/on/stuff

The format of the expression is:

"{" variable-name [ ":" regular-expression ] "}"

The regular-expression part is optional. When the expression is not provided, it defaults to a wildcard matching of one particular segment. In regular-expression terms, the expression defaults to


For example:


will match these:

GET /resources/foo/stuff
GET /resources/bar/stuff

but will not match:

GET /resources/a/bunch/of/stuff