Rest JAX-RS@PathParam以变量参数开头

Rest JAX-RS@PathParam以变量参数开头,rest,jax-rs,Rest,Jax Rs,我正在使用JAX-RS1.x开发一个简单的RESTFul服务,如/{app_id}/job/list/ 因此,我定义了一个资源类,如下所示: @Path("/{app_id}/job") @Produces(MediaType.APPLICATION_JSON) public class JobService { @GET @Path("list") public Response list(@PathParam("app_id") final String appId) {

我正在使用JAX-RS1.x开发一个简单的RESTFul服务,如/{app_id}/job/list/

因此,我定义了一个资源类,如下所示:

@Path("/{app_id}/job")
@Produces(MediaType.APPLICATION_JSON)
public class JobService {

  @GET
  @Path("list")
  public Response list(@PathParam("app_id") final String appId) {
    // ....
  }
}
但是实现(在我的例子中是RestEasy)似乎无法找到这个资源。如果我将其设置为
/job/{app\u id}/list
,它可以工作,但不能
/{app\u id}/job/list

是因为我使用变量
{app_id}
作为起始路径元素吗?JAX-RS是否希望修复第一个path元素

根资源仅定义为
/

是因为我使用了变量{app_id}作为起始路径元素吗?JAX-RS是否希望修复第一个path元素

否,模板参数可以位于路径中的任何位置,也可以位于资源(=类)或子资源(=方法)上


如果没有其他JAX-RS资源,代码就可以工作。检查您的系统是否有其他可能与您的URI路径匹配的
@Path
类。

是否有另一个类具有URI路径模板,如@Path(“/”)?是的,我有一个根资源类映射为@Path(“/”)。这将路由所有请求,如
http://host/webapp-context/
设置为该默认类。但问题在于映射为
http://host/webapp-context/{app_id}/job/list
。谢谢你,用
@Path(“/”)删除资源类实际上解决了我的问题。你能解释一下为什么在这个场景中,只有
@path(“/”
的类会破坏其他资源类吗;我得做更多的研究。我认为,如果有一个类具有URI路径模板,例如@path(“/”),那么它将成为一个根资源类。JAX-RS将在根资源类方法中查找@Path(“/{app\u id}/job”),因为/{app\u id}匹配该根类的完整URI模板,因为{app\u id}是一个变量。您可以将@Path(“/{app_id}/job”)实现为“/”根资源类中的一个方法。我没有意识到一个根类只有
@Path(“/”
)实际上会产生歧义。再次感谢,这解决了我的问题:)感谢Tichodroma澄清了我的疑问,我将检查应用程序中的@Path是否存在任何歧义。实现抛出了javax.ws.rs.NotFoundException.Tichodroma,你是对的,我有一个模糊的
@Path
,保利诺没有看我的代码就正确指出了这一点。同时感谢Tichodroma修复了格式。我以后会处理这件事的。