我在REST类中使用javax.ws.rs.Path
类来配置路径。它表现得很奇怪...我的配置是这样的......这不是实际的文件,但我已经展示了一个复制,让你了解我的配置。
的Class1
@Path("/v2")
public class BoxResource {
@POST
@Path("/ie/box")
public Response createbox(...) {
...
}
}
Class2
@Path("/v2/ie")
public class BagResource {
@POST
@Path("/bag")
public Response createbag(...) {
...
}
}
当我发出类似/v2/ie/box
的HTTP请求时,会抛出服务器配置错误。但是,如果我像下面那样更改我的Class2,它就可以正常工作。
@Path("/v2/ie/bag")
public class BagResource {
@POST
public Response createbag(...) {
}
}
为什么会这样..在类级别和方法级别@path的配置是否不同?
答案 0 :(得分:14)
/v2/ie/box
的请求已映射到Class2
,因为已有
@Path("/v2/ie")
作为类注释。
在这种情况下,最长Path
获胜。永远不会查看Class1
,因为它具有较短的类注释@Path("/v2")
。
由于Class2
没有映射到剩余/box
的方法,因此您将获得404 Not Found
。
<强>建议强>
@Path
注释 :@Path("/v2/ie/bag")
和@Path("/v2/ie/box")
或 @Path("/v2/ie")
,方法注释为@Path("/bag")
和@Path("/box")
。修改强>
另见the JAX-RS 2.0 spec的“3.7匹配资源方法请求”部分。