【发布时间】:2013-06-07 00:05:08
【问题描述】:
是否可以为两个资源映射相同的路径?
例如:Resource1.java
@Path("/users")
例如:Resource2.java
@Path("/users")
这可能吗?这两个类都有不同的子路径,但它仍然失败并给我 500 内部服务器错误和 servlet 初始化错误。
【问题讨论】:
是否可以为两个资源映射相同的路径?
例如:Resource1.java
@Path("/users")
例如:Resource2.java
@Path("/users")
这可能吗?这两个类都有不同的子路径,但它仍然失败并给我 500 内部服务器错误和 servlet 初始化错误。
【问题讨论】:
specification 的 3.7.2 节中指定的请求匹配规则基本上假定每个资源类都会有一个明确的、唯一的@Path 表达式与之关联。
说实话,如果您发现自己需要为两个不同的资源指定相同的路径,那么您可能应该合并这些资源。
【讨论】:
如果路径有不同的子路径,那么您应该在单独的@Path 属性中更完整地指定路径,例如:
@Path("/users/{id:[a-z0-9]+}/sub1/")
@Path("/users/{id:[a-z0-9]+}/sub2/")
如果您无法指定它们以明确在给定任何特定路径的情况下调用哪个资源,那么 Jersey 将无法决定调用哪个资源。
【讨论】:
我认为如果您更改有关请求的其他内容,您实际上可以拥有相同的路径。
如果我更改每个方法的 @produces 和 @consumes,例如,我可以为其中一个方法返回 XML,为另一个方法返回 JSON。
@produces(Application.XML)
@Path("/path")
public void methodA();
@produces(Application.jSON)
@Path("/path")
public void methodB();
【讨论】:
我建议使用一个映射到 jersey 的类,并有 2 个您委托的帮助器类以保持您的代码干净。
【讨论】:
如果您提出可能有多个资源能够响应的请求,Jersey 将给您一个错误。也就是说,资源具有不明确的路径。但是,如果整体路径不像您说的那样模棱两可,我认为这不是您遇到的错误。
【讨论】: