jersey中的注释inheritance

我正在创建一些具有相同forms的资源类,所以一个好主意是使用DRY并使用inheritance。 所以我创建了一个RootResource类并在那里放了一些方法。 我想注释它们然后在子类中实现它们但它不起作用! 这是一个示例代码:

public abstract class RootResource { @GET @Path("/{id: .*}") public abstract String getInfo(String uid); } @Path("/user") public class UserResource extends RootResource{ public String getInfo(@PathParam("id") String uid) { System.out.println("Hello!"); } } 

我正在使用jersey2.6。 任何想法? 谢谢。

我在使用泽西时经历过同样的问题。 JAX-RS的Java EE标准声明如下:

3.6注释inheritance

JAX-RS注释可用于>超类或实现接口的方法和方法参数。 这样的注释由相应的子类或实现类方法inheritance,前提是该方法及其参数没有自己的任何JAX-RS注释。 超类上的注释优先于已实现接口上的注释。 在多个实现的接口中定义的冲突注释的优先级是特定于实现的。

如果子类或实现方法具有任何JAX-RS注释,则忽略超类或接口方法上的所有注释

虽然Jersey作为参考实现对此声明非常严格,但Resteasy的实现更加宽松,并为我做了诀窍。

指定类的路径非常重要,因为它是根资源类,因此它将获取查看类加载的位置,而不是单个重写方法:

  @Path("/account/member/") public class RootResource { . . .