2016-03-04 115 views
0
@Path("a") 
public class A {} 

@Path("b") 
public class B extends A { 
    @GET 
    getList(){} 
} 

我想要一个路径是GET本地主机/ REST/V1/A/BRestEasy可以扩展@Path吗?

它是一个办法做到这一点?简单的扩展并不能解决问题

回答

1

注解可以是继承,但它们不是扩展或连接或类似的东西。用这种方式 - @PathB上完全擦除@PathA。 (无B@Path,它会从A继承@Path,可能导致部署冲突,但那是不伦不类。)

有两种方法,把我的头顶部,做到这一点。第一,当然,只要涉及到这样做:

@Path("a/b") 
public class B ... 

第二个涉及子资源(段the JAX-RS 2.0 spec 3.4.1)......这里

@Path("a") 
public class A { 

    @Path("b") 
    public B getB() { 
     return new B(); 
    } 
} 

public class B { 
    // blah blah blah 
} 

两件事情我想强调:

  1. B没有自己的@Path。它是一个子资源,除了通过A之外不能直接访问。到B的总路径是子资源定位器(getB())上应用程序路径A的路径和B的路径以及适当的/ s的串联。

  2. B不从A继承。如果是这样,就像我上面所说的那样,它会继承A的@Path。这可能会产生冲突,或导致A被忽略,以支持更具体的子类型B。 (有关注解继承的详细信息,请参阅规范的第3.6节,关于给定请求的确切匹配类/方法的选择,请参见第3.7节。)

+0

谢谢。我用第一种方式 - @Path(“a/b”) – kret