泽西@Path注释在类级别是强制性的

use*_*888 5 java rest jersey

我有一个类:

public class TestService {

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

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

}
Run Code Online (Sandbox Code Playgroud)

如果我没有在Class级别给出@Path注释,那么这个类不会被识别为REST资源,但我不能为这个类提供"/ v1"路径,因为已经有另一个带有@Path的类("/ v1") .

有什么可行的解决方法,使这个类被识别为Rest资源

cas*_*lin 7

资源类

需要@Path注释来定义资源类.引用Jersey文档:

根资源类是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() {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

更好的解决方案

我不知道你的项目是什么样的,但是我没有一个类,而是有两个类,设计如下:

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

    @GET
    @Path("/list")
    public Response getTest1() {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)
@Path("/v1/test2")
public class TestService2 {

    @GET
    @Path("/list")
    public Response getTest2() {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)