0

我有所有扩展的变体资源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对象,如果一切正常,我会告诉 jersey 继续处理资源。客户端也是如此。

我不能使用常规的 servlet/过滤器 - 因为它在 jersey servlet 之前被调用,我不知道正在调用哪个资源。

在泽西岛最好的方法是什么?

在知道 jersey 将调用的方法和调用之间是否有干扰的地方?

4

2 回答 2

0

您可以将 jersey 2.x ContainerRequestFilters 与 NameBinding 一起使用。匹配资源后,绑定过滤器将在执行方法本身之前执行。您可以查看 Jersey 用户指南,其中指出这是可能的: 第 9.2.1.1 章 解释了 PreMatching 和 PostMatching 过滤器,第 9.4章显示了 jersey 过滤器的执行顺序。

请参阅我的帖子以了解我在使用 jersey 2 制作过滤器时遇到问题的实现。

于 2014-06-06T20:29:53.717 回答
0

REST 中有 4 种基本的 http 方法,分别是GETPUTPOSTDELETE。您的注释告诉 Jersey 在发生 a 时调用什么方法http request。Jersey 在请求中查找目标URI并将其与您的模型进行匹配。如果请求是 a http get,它将执行@Get从具有正确@Path注释的类中注释的方法。通常,您不想直接在此带注释的方法中授予对资源的访问权限。一种常见(可能不完美)的方法是实现一个DAO处理对资源的访问的类,当然在将资源返回给@Get带注释的方法,它本身只会将资源传递给客户端。因此,您将在应用程序中在持久化(SQL 等)和客户端接口(Jersey)之间获得另一层。

于 2013-06-04T06:37:17.633 回答