【问题标题】:Interfere in Jersey REST life cycle干扰 Jersey REST 生命周期
【发布时间】:2013-05-29 19:34:20
【问题描述】:

我有变体资源都扩展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 之前调用的,我不知道调用的是哪个资源。

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

在知道球衣将调用的方法和调用之间是否有干预的地方?

【问题讨论】:

  • 面向方面的编程。方面J。
  • 你能举例说明如何在球衣中使用它吗?
  • 这将要求其他程序员在每个方法上方使用安全注解。我希望它高于类名,但如果它高于类 - 我将如何让 @PathParam businessId 或 userId 进行验证?
  • 这只是一个例子。您不必将其与注释一起使用。阅读方面。您可以访问方法参数。

标签: java rest jersey


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    请参阅我的post,了解我在使用 jersey 2 的过滤器时遇到问题的实现。

    【讨论】:

      猜你喜欢
      • 2011-07-07
      • 2011-05-20
      • 2013-09-06
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      相关资源
      最近更新 更多