JBoss.orgCommunity Documentation

第 4 章 使用 @Path 和 @GET, @POST 等注解

4.1. @Path 和正则表达式映射

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

   @GET
   @Path("/books")
   public String getBooks() {...}

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

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

   @DELETE
   @Path("/book/{id}")
   public void removeBook(@PathParam("id") String id {...}
   
}

假设您已经配置了 RESTEasy servlet,并且可以从 http://myhost.com/services 的根路径访问它。这些请求将由 Library 类处理:

@javax.ws.rs.Path 注解必须存在于类和/或方法上。如果它同时存在于类和方法中,则到资源方法的相对路径是类和方法的叠加。

在 @javax.ws.rs 包中每个 HTTP 方法都有注解。@GET, @POST, @PUT, @DELETE, 和 @HEAD。您可以将它们放在希望映射到某种 HTTP 方法的公共方法上。只要类上有 @Path 注解,就不必在所映射的方法上有 @Path 注解。您可以拥有多个 HTTP 方法,只要它们能够与其他方法区分开来。

当你在注解了 @path 上没有使用指定的HTTP方法注解,被称为JAXRSResourceLocators。

@Path 注解并不局限于简单的路径表达式。您还可以将正则表达式插入 @Path 的值。例如:

@Path("/resources)
public class MyResource {

   @GET
   @Path("{var:.*}/stuff")
   public String get() {...}
}

下面的 GET 请求将路由到 getResource ()方法:

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

表达式的格式是:

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

regular-expression 部分是可选的。如果不提供表达式,则默认为一个特定段的通配符匹配。在regular-expression 中,表达式默认为

"([]*)"

例如:

@Path("/resources/{var}/stuff")

将匹配这些:

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

但不会匹配:

GET /resources/a/bunch/of/stuff