我的变体资源都扩展为BaseResource<T>
@Component
@Path("/businesses")
public class BusinessResource extends BaseResource<Business>{
@GET
@Path({businessId}/)
public Business getBusiness(@PathParam("businessId") Integer businessId){..}
}
@Component
@Path("/clients")
public class ClientResource extends BaseResource<Client>{
@GET
@Path({clientId}/)
public Client getClient(@PathParam("clientId") Integer clientId){..}
}
我想,当有人打电话时
/businesses/3
,它将首先通过我将编写的方法来验证T
对象,如果一切正常,我会告诉球衣继续处理资源。
客户也一样。
我不能使用常规的servlet /过滤器 - 因为它被称为BEFORE jersey servlet,我不知道正在调用哪个资源。
泽西岛最好的办法是什么?
在知道球衣将要调用的方法与调用之间是否存在干扰的地方?
答案 0 :(得分:0)
REST中有4种基本的http方法,namly GET
,PUT
,POST
,DELETE
。
您的注释告诉Jersey发生http request
时要调用的方法。 Jersey在请求中查找目标URI
并将其与您的模型匹配。如果请求是http get
,它将使用正确的@Get
annotiaton从类中执行使用@Path
注释的方法。
通常,您不希望直接在此带注释的方法中授予对资源的访问权限。一种常见的(可能不是完美的)方法是实现一个处理资源访问的DAO
类,当然在将资源返回给@Get
带注释的方法之前进行验证。只将资源传递给客户端。因此,在持久化(SQL等)和客户端接口(Jersey)之间,您将在应用程序中获得另一层。
答案 1 :(得分:0)
您可以将jersey 2.x ContainerRequestFilters与NameBinding一起使用。在匹配资源之后,将在执行方法本身之前执行绑定过滤器。 您可以看到Jersey用户指南,其中指出可以: Chapter 9.2.1.1解释了PreMatching和PostMatching过滤器,chapter 9.4章节介绍了泽西过滤器的执行顺序。
请参阅我的post了解我遇到问题的实施方法,以便使用泽西2的过滤器工作。