泽西@PathParam在实例级别与方法级别

时间:2015-05-07 06:49:53

标签: java servlets jersey jax-rs jersey-2.0

在泽西岛课程中,哪一个更适合这两者:

  1. 在实例变量上
  2. @PathParam("服务-ID&#34) private String serviceId;

    1. 关于方法参数
    2. public Response subscribe(@PathParam(" service-id")String serviceId){}

      我只使用第一个因为几乎所有方法都需要service-id。但是,我的一位同事对这种方法发表了评论,最终Jersey类基于servlet和servlet不应该有状态变量。

      我在JSR-311 java docs

      中了解到这一点
        

      因为注入发生在对象创建时,所以使用它   资源类字段和bean属性的注释只是   支持默认的每请求资源类生命周期。   使用其他生命周期的资源类应该只使用它   资源方法参数的注释。

      由于在webapp中,我的Jersey类 将遵循每个请求的资源类生命周期,我觉得第一种方法是安全的。请思考:)

2 个答案:

答案 0 :(得分:3)

安全因为只在请求范围内允许这个注释(所以每个请求都有自己的bean / resource实例,并且没有共享状态)。

我可能会给每个方法提供完整的参数集,即使它有点重复。让您更容易一目了然地看到发生了什么。这是一个代码风格问题,人们可以在这里有不同的意见。

答案 1 :(得分:1)

这只是编码样式问题,因为此代码具有完全相同的结果。 我也更喜欢在方法中定义它,而不是在实例中定义它。

无论如何,一旦编译,结果是一样的! :)