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

问题描述 投票:2回答:2

在泽西岛级,哪个更适合这两个:

  1. 在实例变量上

@PathParam(“service-id”)private String serviceId;

  1. 在方法论证上

public Response subscribe(@PathParam(“service-id”)String serviceId){}

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

我在JSR-311 java docs读到了这个

由于注入发生在对象创建时,因此仅对默认的每请求资源类生命周期支持在资源类字段和bean属性上使用此批注。使用其他生命周期的资源类应仅在资源方法参数上使用此注释。

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

java servlets jersey jax-rs jersey-2.0
2个回答
3
投票

由于仅在请求范围中允许此注释(因此每个请求都获得其自己的bean / resource实例且没有共享状态),因此它是安全的。

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


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.