干扰泽西岛REST生命周期

时间:2013-06-03 15:26:39

标签: java rest jersey

我的变体资源都扩展为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,我不知道正在调用哪个资源。

泽西岛最好的办法是什么?

在知道球衣将要调用的方法与调用之间是否存在干扰的地方?

2 个答案:

答案 0 :(得分:0)

REST中有4种基本的http方法,namly GETPUTPOSTDELETE。 您的注释告诉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的过滤器工作。