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