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

时间:2016-08-31 00:03:15

标签: java rest jersey

我有一个类:

public class TestService {

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

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

}

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

有哪些可行的解决方法,使此类被识别为Rest资源

3 个答案:

答案 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)。

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