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

问题描述

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

解决方法

可能有两个与URI匹配的@Path注释。在您的情况下,如果Servlet映射为
service
,则可能具有
@Path(\"/library\")
@Path(\"library/mynewlibrary\")
。 当请求到达时,匹配路径按降序排序,因此当带有“ 3”的请求到达时,应调用第二类。,肯定有两种方法具有相同的
@Path
注释,例如,如果它们通过其他方式(例如HTTP方法或
@Consumes
注释)加以区分。类上的4用作该类方法上4的默认值/根。而且,如果您的一条路径“在另一条路径之内”,那根本不是问题。 JAX-RS指定使用可能的最具体匹配。 (我宁愿不要那样做,而是让“外部”类在适当的局部匹配上返回对“内部”类的引用,以便每条路径都有可追溯的责任之路,肯定会导致单个类。但这需要一种完全不同的方式来排列
@Path
注释。) 但是,如果最终有两种方法可以满足相同的传入请求,那么就会发生冲突,并且JAX-RS实现将可以自由选择要使用的方法(取决于实现方式)。那可能不是您想要的,因为在自由选择的情况下计算机往往会做出错误的决定。,您可以使用以下配置来实现拥有/ service / library / mynewlibrary的目标。 在现有的类中,您已在类级别配置了/ service / library,因此您可以在要添加的新类中的类级别配置/ service,然后在方法级配置/ library / mynewlibrary。 这样,对于两个类,它就不会有相同的路径,并且您的目标也可以实现。我试过了,它起作用了。