2011-04-18 97 views
9

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

谢谢!

+1

当你尝试时会发生什么? – 2011-04-18 22:16:40

+0

当我尝试它时,我的新类中没有方法被调用,并且只有当前类处理/服务/库中的方法被称为 – Stephen 2011-04-18 22:37:09

+0

@ user663041您确定新类已注册吗?你使用什么JAX-RS框架? – Tarlog 2011-04-19 17:01:42

回答

4

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

+0

您提到的是@Path(“library/mynewlibrary”),该类中的@Path标识符还是该类中的方法?这就是我想要做的:classA将处理'/ service/library/books',而classB将处理'/ service/library/movies',因此它们都会有一个@Path(“/ library”)标识符他们的类声明,而两个类中的方法将处理两个不同的URI。例如,假设它们都是相对路径,classA.getBooks()将具有'@Path(“/ books”)',而classB.getMovies()将具有'@Path(“/ movies”)''。两个@Path(“/ library”)可能吗? – Stephen 2011-04-19 22:36:31

+0

我是指类注解而不是方法注释。你的方法是行不通的,因为框架可能会选择错误的类:它首先尝试选择最正确的类,然后选择最正确的方法。 – Tarlog 2011-04-20 05:57:18

+0

如果您有一个处理“书籍”的类和一个处理“电影”的类,为什么您需要方法级别的注释?把注释放在课堂上,问题就会解决。 – Tarlog 2011-04-20 06:04:37

1

确实有两种方法可以使用相同的@Path注释,例如,如果它们通过其他方式(如HTTP方法或@Consumes注释)进行区分。类上的@Path充当类的方法上的默认/根目录@Path。而且,如果你有一条路径在另一条路径的“内部”,这根本就不是问题; JAX-RS指定使用可能的最具体匹配。 (我宁愿不这样做,而是让“外部”类在适当的部分匹配中返回对“内部”类的引用,以便每条路径都有一条可追踪的路径来负责,这肯定会导致一个类。这需要尽管安排@Path注释的相当不同的方式。)

但如果你已经结束了两个方法,可以服务于同一传入的请求,你已经有了一个冲突和JAX-RS的实现将是自由选择使用哪一个(以实现相关的方式)。这可能不是你想要的,因为计算机在给予自由选择时倾向于做出错误的决定。

0

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

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

这样就不会有两个班的路径相同,你的目标也达到了。我试过这个,它的工作原理。

相关问题