适用于球衣中两种资源的相同路径

时间:2013-06-07 00:05:08

标签: java spring jersey

是否可以为两个资源映射相同的路径?

Ex:Resource1.java

@Path("/users")

Ex:Resource2.java

@Path("/users")

这可能吗?这两个类都有不同的子路径,但它仍然失败,并且在servlet init错误时给出了500个内部服务器错误。

5 个答案:

答案 0 :(得分:6)

specification第3.7.2节中指定的请求匹配规则基本上假定每个资源类都有一个与之关联的明确,唯一@Path表达式。

老实说,如果您发现自己需要为两个不同的资源指定相同的路径,那么您应该合并资源。

答案 1 :(得分:4)

如果您更改了有关请求的其他内容,我认为您实际上可以拥有相同的路径。

如果我在每个方法上更改@produces@consumes,我可以为其中一个方法返回XML,为另一个方法返回JSON。

@produces(Application.XML)
@Path("/path")
public void methodA();

@produces(Application.jSON)
@Path("/path")
public void methodB();

答案 2 :(得分:4)

如果路径具有不同的子路径,那么您应该在单独的@Path属性中更完整地指定路径,例如:

@Path("/users/{id:[a-z0-9]+}/sub1/")

@Path("/users/{id:[a-z0-9]+}/sub2/")

如果您无法在给定任何特定路径时明确调用哪个资源的范围内指定它们,那么Jersey将无法决定调用哪个资源。

答案 3 :(得分:2)

我建议使用一个映射到jersey的类,并使用您委派的2个辅助类来保持代码清洁。

答案 4 :(得分:1)

如果您提出多个资源可能响应的请求,

Jersey会给您一个错误。也就是说,资源具有模糊路径。但是,我不认为这是你在这里遇到的错误,如果整体路径不像你说的那么模糊。