我有dropwizard.io应用程序,并且GET请求有问题,我的资源看起来像:
@Path("/foobar")
public class FooBarResource
(...)
@GET
@Path("/{id}")
@UnitOfWork
public Response getFooBar( @PathParam("id") Long id){
return Response.status(200).entity(FooBarService.get(id)).build();
}
@DELETE
@Path("/{id}")
@UnitOfWork
public Response getFooBar( @PathParam("id") Long id){
return Response.status(200).entity(FooBarService.delete(id)).build();
}
@PUT
@Path("/{id}")
@UnitOfWork
public Response getFooBar( @PathParam("id") Long id, FooBar fooBar){
return Response.status(204).entity(FooBarService.update(id, fooBar)).build();
}
}
当我发送GET localhost:port/appPath/foobar/
时,我有405而不是404.我怎么能得到404?当我调试我的应用时,我所拥有的只是javax.ws.rs.WebApplicationException
,但它是空的。
答案 0 :(得分:1)
您尝试GET localhost:port / appPath / foobar /并获得405(不允许使用方法)。原因是此资源(= foobar)存在,因此404(未找到资源)是错误的。如果您创建getFooBar()的副本 - >没有路径通知的getFooBar2()你应该得到200。
如果需要,可以创建一个容器过滤器,如果找不到路径,则会产生异常。然后可以将此异常映射到404。
答案 1 :(得分:0)
您应该使用可选的路径参数,如here
所述@GET
@Path("/{id:.*}")
@UnitOfWork
public Response getFooBar( @PathParam("id") String id){
try {
return Response.status(200).entity(FooBarService.get(Long.parseLong(id))).build();
} catch (NumberFormatException ignore) {
return Response.status(404).build();
}
}