球衣中的注释继承

时间:2014-07-12 22:31:56

标签: java inheritance annotations jersey-2.0

我正在使用相同的表单创建一些资源类,所以一个好主意是使用DRY并使用继承。 所以我创建了一个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!");
  }
}

我使用的是球衣2.6。 任何的想法? 感谢。

2 个答案:

答案 0 :(得分:4)

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

  

3.6注释继承

     

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

     

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

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

答案 1 :(得分:0)

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

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