奇怪的JAX-RS映射,用于不可用的资源

时间:2015-01-21 16:31:04

标签: java rest java-ee jax-rs resteasy

我们对JAX-RS @PATH映射有一些非常奇怪的行为(使用ReastEasy,Jackson 1.9)。

以下情景:

  • 我们有几个具有JaxRS注释的LocalServices和CrudServices

例如:

@Path('/')
public interface CarService extends AbstractService {

    @POST @Consumes(...) @Produces(...)
    @Path('/car/calculate')
    Value doSomething(Car car);
}


/* This class has no jax rs annotations at all */
public class CarImpl implements CarService {

    public void someMethodWithoutAnnotation(Currency ccy) { ... }

    public Value doSomething(Car car) { ... }        

}

现在,我在集成测试中执行以下请求:

POST url/carfoobar

是的 - 完全是'carfoobar'。

不是接收'405 - 不允许所请求的资源使用指定的HTTP方法。',我可以看到:

  • jackson将请求发送到:PathInfo:/ carfoobar
  • 我们确实没有包含'carfoobar'的路径的资源
  • 我们有一个资源的没有方法,它采用带有动态路径参数的路径
  • resteasy找到'CarImpl'类作为此请求的合适Managed Bean(CarImpl没有jaxrs注释!)
  • 它抛出一个异常,它找不到MessageBodyReader来将传入的json映射到Currency对象(显然,它试图将请求映射到CarService.someMethodWithoutAnnotation)

我的问题是:

为什么会这样?为什么重新尝试将传入的休息请求映射到方法上。在我看来,它应该抛出异常,找不到合适的路径。

此致

1 个答案:

答案 0 :(得分:1)

您的CarService界面注释为@Path('/')。 Jackson正确地调度了CarService接口的实现,即CarImpl。它找到了一个@POST @Path("carfoobar")的方法,找不到它并为此抛出异常。