【发布时间】:2018-06-12 15:42:34
【问题描述】:
我是 JAX-RS 的新手,我正在尝试了解 @Context 注释的工作原理。我有一个 REST 服务,目前正在使用某些过滤器对不同的请求类型进行额外处理。在其中一个过滤器中是以下行:
public class SentryFilter {
@Context
HttpServletResponse response;
...
该值稍后在该过滤器的filter() 方法中使用。问题是响应对象为空。我已经通过调试器,无法确定为什么它为空。
根据我在 JAX-RS 文档中阅读的内容,HttpServletResponse 的 @Context 注释可以由资源方法填充。所以,我修改了我调用的 API 以包含 HttpServletResponse
public interface APIStuff {
@Path("deviceName")
@GET
@Sentry
String getDeviceName(@PathParam("deviceId") @Size(min = 1, max = 1024) final String deviceId, @Context HttpServletResponse httpServletResponse);
...
这会返回相同的 HttpServletResponse is null 错误。
所以问题是,这个值应该在哪里“填充”?编写过滤器类的人显然是相信response 对象会被填充,所以我认为这不是将@Context HttpServletResponse 传递给filter() 方法的问题。
【问题讨论】:
-
哪个服务器?可能是相关的。
-
不明白你的意思,这是服务器端代码的一部分
-
您在哪个 Java EE 服务器或独立服务器下运行?我怀疑这种行为可能特定于特定的 JAX-RS 实现/环境。