RESTEasy 系列 Chapter 4 使用 @Path and @GET, @POST, 等
@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類的請求將被處理:
- GET http://myhost.com/services/library/books
- GET http://myhost.com/services/library/book/333
- PUT http://myhost.com/services/library/book/333
- DELETE http://myhost.com/services/library/book/333
@javax.ws.rs.Path注解必須存在於類和/或資源方法。如果類和方法都存在,這個資源方法的相對路徑是連接類和方法。
在@javax.ws.rs包注解的每個HTTP方法,@GET, @POST, @PUT, @DELETE, 和 @HEAD。你可以將這些公共方法映射到某些想要的HTTP方法。只要有一個@Path注解在類上,你要映射的方法不用再有@Path注解。你可以有一個以上的HTTP方法,只要它們能區別於其它的方法。
當你有一個@Path注解的不是HTTP的方法,它們被叫做JAXRSResourceLocators。
4.1. @Path和正則表達式映射
@Path 注解不限於簡單的路徑表達式。你也能夠插入正則表達式到@Path的value。示例:
@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 ] "}"
正則表達式部分是可選的。當表達式不提供時,它默認為一個通配符匹配特定的部分。在正則表達式條件下,這個表達式默認為是:
"([]*)"
示例:
@Path("/resources/{var}/stuff")
將匹配它們:
GET /resources/foo/stuff GET /resources/bar/stuff
但是不能匹配:
GET /resources/a/bunch/of/stuff
