2016-03-04 153 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