我有一个类:
public class TestService {
@Path("/v1/test1/list")
public Response getTest1() {
}
@Path("/v1/test2/list")
public Response getTest2() {
}
}
如果我没有在Class级别给出@Path注释,那么这个类不会被识别为REST资源,但是我不能给" / v1"这个类的路径,因为已经有另一个带有@Path的类(" / v1")。
有哪些可行的解决方法,使此类被识别为Rest资源
答案 0 :(得分:7)
定义资源类需要@Path
注释。引用Jersey documentation:
根资源类是使用
@Path
注释的POJO(普通旧Java对象),至少有一个使用@Path
注释的方法或资源方法指示符注释,例如作为@GET
,@PUT
,@POST
,@DELETE
。
已经mentioned by 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() {
...
}
}
答案 1 :(得分:2)
您可以添加空路径NumberFormatException
或@Path("")
。但是,此问题可能表明您应该以不同方式设计代码。
答案 2 :(得分:1)
@Path
批注用于指定URI
,通过它可以访问资源和API。在这种情况下,资源是REST
Web服务本身。因此,该注释存在于类级别以及方法级别。必须使用REST
注释对@Path
Web资源类进行注释。因此,如果用户想通过资源“ HelloWorld”上下文访问“国家”,则:
课程级别的资源将具有@Path("/")
。这是类级别的默认注释。
API级别的资源将带有@Path("Countries")
批注。
最佳实践是,类级别的路径注释应为限定Web服务的名词,而方法级别的注释可为名词或动作(例如,分别为user和add-user)。