2015-04-07 68 views
0

我在项目中使用apache cxf来实现Jax-rs实现。我有以下地址定义的服务: http://ip:port/myservice/ {操作}Apache CXF - 处理操作中丢失的路径参数

考虑一个操作的定义如下

@Override 
@GET 
@Path("operation1/{x}/{y}") 
@Produces("application/xml") 
public String operation1(@PathParam("x") final String x, @PathParam("y") final String y) { 
    return null; 
} 

在请求者使得与一些操作名称的请求的情况下这个服务器未在myservice中定义,它将返回404,这是预期的行为。但是,在正确请求操作名称但路径参数不正确的情况下,我得到了相同的404。如果请求中缺少{x}或{y}路径参数,我想创建一个适当的错误。但我无法找到一种优雅的方式,我可以根据操作处理异常情况。在这种情况下,CXF从不映射到操作。

我有此异常映射:

​​

}

将处理所有的错误情况,但它不提供任何资料的请求在异常哪个网址。 有没有办法可以在不定义路径参数的情况下为不同的操作处理异常? 对于例如:我想处理以下请求与一些自定义逻辑仅为operation1定义。 http://ip:port/myservice/operation1/20

回答

1

我看到两种解决方案为您的情况。
1)移动你的路径参数来查询参数。 @QueryParam
2)创建一个过滤器,它映射到URL operation1/*

+0

我怎样才能把过滤器放在CXF中的特定URL模式? – ishan

+0

你可以查看这篇文章https://www.safaribooksonline.com/library/view/java-ee-7/9781449370589/ch04.html或http://www.developerscrappad.com/1781/java/java -ee/rest-jax-rs/java -ee-7-jax-rs-2-0 -cors-on-rest-how-to-make-rest-apis-accessible-from-a-different-domain/ – VladS

+0

我看着拦截器,发现它们过于复杂。我没有时间理解CXF中的整个拦截机制(您必须),但我仍然认为这将是更好的方法来处理错误。 – ishan

0

虽然找到了我的情况的解决方案,我需要验证路径参数,我发现this link这说明我的问题一个很好的解决方法。尽管它只是一种破解,并不是在现有代码中实现的好主意,但是如果您需要在各自的操作中使用路径参数,则可以考虑它。