2012-04-26 19 views
3

@Context HttpHeaders应该在Interceptor内工作吗?我可以使用拦截器在JAX-RS应用程序中检查http标头吗?

我创建了一个RestfulClasses类,它扩展了javax.ws.rs.core.Application并注释了它@javax.ws.rs.ApplicationPath("/api") - 所有漂亮的标准东西。

我也有一个类,添加到处理特定的路径,它本身工作正常。麻烦的是我想检查传入的HTTP标题,并且使用拦截器听起来很完美。

我的拦截器类声明了@Context HttpHeaders httpHeaders,但在@AroundInvoke方法中,此属性为null。

我应该期待这个工作还是我错过了什么?有另一种方法吗?

+1

为什么你不会只添加一个Servlet过滤器? [http://www.oracle.com/technetwork/java/filters-137243.html](http://www.oracle.com/technetwork/java/filters-137243.html)它可以做同样的事情,是一个更标准的方法。 – 2012-04-27 08:47:59

回答

0

我发现使用拦截器的方式:延长有成员的基类:

@Context protected HttpHeaders headers; 

这检查头的任何方法被调用之前@AroundInvoke方法。虽然它并不完美。

阿尔乔姆的解决方案也可以,但我是新来的平台,并没有遇到过servlet过滤器。虽然我仍然喜欢对web.xml标记进行注释,但它更优雅...

+0

如果注释是唯一的挂断,请参阅[Servlet 3.0的注释](http://docs.oracle.com/javaee/6/api/javax/servlet/annotation/package-summary.html)。他们让你[无需任何XML设置](https://blogs.oracle.com/swchan/entry/servlet_3_0_annotations)。 – 2012-04-27 14:21:22

+0

Yep理解 - 我刚刚创建了一个过滤器来执行我想要的操作(非常容易),并且我即将跳过来阅读自servlet v3以来的注释。非常感谢您的帮助! – jmkgreen 2012-04-27 14:33:13

相关问题