@Path("a")
public class A {}
@Path("b")
public class B extends A {
@GET
getList(){}
}
我想要一个路径为 GET localhost/rest/v1/a/b
有办法做到这一点吗?简单的扩展并不能解决问题
最佳答案
注释可以继承,但它们不能扩展或连接或类似的东西。这么说吧 - B
上的 @Path
完全删除了 A
上的 @Path
。 (如果没有 B
的 @Path
,它将从 A
继承 @Path
,可能会导致部署冲突,但这既不存在也不存在。)
我突然想到有两种方法可以做到这一点。当然,第一个简单地涉及到这样做:
@Path("a/b")
public class B ...
第二个涉及子资源(the JAX-RS 2.0 spec的第3.4.1节)...
@Path("a")
public class A {
@Path("b")
public B getB() {
return new B();
}
}
public class B {
// blah blah blah
}
这里我想强调两件事:
B
没有自己的@Path
。它是一个子资源,只能通过A
才能直接访问。 B 的总路径是子资源定位器上应用程序路径、A
的路径和B
的路径的串联 (getB()
) >),带有适当的/
s。B
不继承自A
。如果确实如此,正如我上面所说,它将继承A
的 @Path。这可能会产生冲突,或导致A
被忽略,而选择更具体的子类型B
。 (有关注释继承的详细信息,请参阅规范的第 3.6 节,有关如何为给定请求选择匹配的类/方法的具体信息,请参阅第 3.7 节。)
关于java - RestEasy 可以扩展 @Path 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35798368/