让我们假设我们有这样的URI模式:
/shop/categories
/shop/categories/{categoryId}
/shop/categories/{categoryId}/products
/shop/categories/{categoryId}/products/{productId}
最后一个可能看起来很奇怪,因为使用它会更直观:
/shop/products/{productId}
但这只是一个例子。类别和产品不是我系统中的真实资源。
我想将它实现为两个JAX-RS类:
@Path("/shop/categories")
@Stateless
@Produces("application/xml")
public class CategoryResource {
@EJB
Shop shop;
@GET
public List<String> get() {
return shop.getCategories();
}
@Path("{categoryId}")
@GET
public String getCategory(@PathParam("categoryId") int id) {
return shop.getCategory(id);
}
@Path("{categoryId}/products")
public CategoryProductResource getCategoryProducts(@PathParam("categoryId") int id) {
return new CategoryProductResource(id);
}
}
和
@Produces("application/xml")
@Stateless
public class CategoryProductResource {
@EJB
Shop shop;
int categoryId;
public CategoryProductResource(){}
public CategoryProductResource(int categoryId) {
this.categoryId = categoryId;
}
@GET
public List<String> get() {
return shop.getProductsOfCategory(categoryId);
}
@Path("{id}")
@GET
public String getCategoryProduct(@PathParam("id") int id) {
return shop.ProductOfCategory(id, categoryId);
}
}
但问题是Shop
没有注入CategoryProductResource
。
注入Shop
比将其传递给构造函数更好吗?
答案 0 :(得分:4)
使用JAX-RS 2.0,您可以执行以下操作:
@Path("{categoryId}/products")
public CategoryProductResource getCategoryProducts(
@PathParam("categoryId") int id,
@Context ResourceContext rc) {
return rc.initResource(new CategoryProductResource(id));
}
在这种情况下,我认为@Stateless
上不需要CategoryProductResource
注释。
HTH。