簡體   English   中英

Jersey @Path 注釋在類級別是強制性的

[英]Jersey @Path annotation mandatory at class level

我有一個類:

public class TestService {

@Path("/v1/test1/list")
    public Response getTest1() {
}

@Path("/v1/test2/list")
    public Response getTest2() {
}

}

如果我不在類級別給出 @Path 注釋,那么這個類就不會被識別為 REST 資源,但我不能為這個類提供“/v1”路徑,因為已經有另一個帶有 @Path("/v1") 的類.

有什么可能的解決方法,使此類被識別為休息資源

資源類

定義資源類需要@Path注釋。 引用澤西文件

根資源類是POJO(普通舊式Java對象)被標注有@Path ,具有注釋的與至少一種方法@Path或資源方法指示符注釋如@GET@PUT@POST@DELETE

一種可能的解決方案

正如Justas已經提到的,一種可能的解決方案是將@Path("")注釋添加到TestService類。 然而,它聞起來並不好:

@Path("")
public class TestService {

    @GET
    @Path("/v1/test1/list")
    public Response getTest1() {
        ...
    }

    @GET
    @Path("/v1/test2/list")
    public Response getTest2() {
        ...
    }
}

更好的解決方案

我不知道你的項目是什么樣的,但我會有兩個類,而不是一個單一的類,設計如下:

@Path("/v1/test1")
public class TestService1 {

    @GET
    @Path("/list")
    public Response getTest1() {
        ...
    }
}
@Path("/v1/test2")
public class TestService2 {

    @GET
    @Path("/list")
    public Response getTest2() {
        ...
    }
}

您可以添加空路徑@Path("")@Path("/") 但是,此問題可能表明您應該以不同的方式設計代碼。

@Path注釋用於指定可以訪問資源和 API 的URI 在這種情況下,資源是REST Web 服務本身。 因此,此注釋存在於類級別以及方法級別。 必須使用@Path注釋來注釋REST Web 資源類。 因此,如果用戶想通過資源“HelloWorld”上下文訪問“Countries”,則:

類級別的資源將具有@Path("/") 這是類級別的默認注釋。 API 級別的資源將具有@Path("Countries")注釋。 作為最佳實踐,類級別的路徑注釋應該是限定 Web 服務的名詞,方法級別的注釋可以是名詞或操作(例如分別為 user 和 add-user)。

https://www.juniper.net/documentation/en_US/junos-space-sdk/13.1/apiref/com.juniper.junos_space.sdk.help/html/reference/spaceannoREST.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM