类级别和方法级别的@Path配置

时间:2013-07-04 13:16:48

标签: web-services http rest jersey jax-rs

我在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的配置是否不同?

1 个答案:

答案 0 :(得分:14)

/v2/ie/box的请求已映射到Class2,因为已有

@Path("/v2/ie")

作为类注释。

在这种情况下,最长Path获胜。永远不会查看Class1,因为它具有较短的类注释@Path("/v2")

由于Class2没有映射到剩余/box的方法,因此您将获得404 Not Found

<强>建议

  1. 仅对方法使用@Path注释 @Path("/v2/ie/bag")@Path("/v2/ie/box")
  2. 使用一个资源类,其类注释为@Path("/v2/ie"),方法注释为@Path("/bag")@Path("/box")
  3. 修改

    另见the JAX-RS 2.0 spec的“3.7匹配资源方法请求”部分。