繁体   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