JAX-RS - 两个类可以具有相同的@Path标识符吗?

时间:2011-04-18 21:30:09

标签: java cxf jax-rs

我有一个重定向到特定URI的webapp:假设 / service / library 。在另一个包中,我有一个jaxrs服务器,它在URI中侦听 / service ,并定义了一些bean来处理请求。已经有相当多的bean,其中一个类已经实现来处理 / service / library 的请求。我正在尝试创建一个新类,它也处理 / service / library 的请求,但使用不同的绝对URI路径,例如: / service / library / mynewlibrary 。我的问题是,是否可以在两个类中定义相同的@Path标识符,或者它们必须是唯一的,换句话说,我是否需要使用像 / service / mylibrary 这样的URI来获取新的类实现而不是实现也使用相同的@Path标识符的第二个类?我对JAX-RS很新,所以我希望我的问题有道理!

谢谢!

3 个答案:

答案 0 :(得分:4)

可以有两个与URI匹配的@Path注释。在您的情况下,如果servlet映射为service,您可能有@Path("/library")@Path("library/mynewlibrary")。 当请求到达时,匹配路径按降序排序,因此当/service/library/mynewlibrary的请求到达时,应调用第二个类。

答案 1 :(得分:1)

当然可以使用具有相同@Path注释的两个方法,例如,如果它们通过其他方式(例如HTTP方法或@Consumes注释)进行区分。类的@Path充当类的方法上@Path的默认/根。而且,如果你有一条“在另一条路径内”的路径,那根本不是问题。 JAX-RS指定使用最具体的匹配。 (我更喜欢不这样做,而是让“外部”类在适当的部分匹配上返回对“内部”类的引用,这样每条路径都有一条可追溯的路径到责任,这肯定会导致单个类。这需要一种完全不同的方式来安排@Path注释。)

但是如果你最终得到两个可以提供相同传入请求的方法,你就会发生冲突,JAX-RS实现可以自由选择使用哪个(以依赖于实现的方式) 。这可能不是你想要的,因为计算机在给予自由选择时往往做出错误的决定。

答案 2 :(得分:0)

您可以使用以下配置来实现/ service / library / mynewlibrary的目标。

在现有类中,您在类级别配置了/ service / library,因此您可以在要添加的新类中的类级别配置/ service,然后在方法级别configure / library / mynewlibrary。

这样两个类的路径就不一样了,你的目标也实现了。我试过这个并且有效。