Jersey以编程方式获取Request对象

时间:2017-07-20 19:32:09

标签: jersey jersey-2.0

有没有办法以编程方式获取请求(HttpServletRequest?)?我只能在端点方法/类上找到如何使用注释。

Per https://stackoverflow.com/a/5118844/190164我可以在我的端点添加带注释的参数:

user = UserData.objects.get(id=2) 
print user.first_name  // it will print first name of user

或者我可以在课堂上注入(https://stackoverflow.com/a/26181971/190164

@POST 
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public String showTime(
    @Context HttpServletRequest httpRequest
) {
    // The method body
}

但我想在另一个没有直接链接到泽西岛的班级中访问该请求。像上面第二个例子中那样添加@Context注入并不起作用,因为这个类没有被Jersey实例化。我希望能够做一些像

这样的事情
public class MyResource {

  @Context
  private HttpServletRequest httpRequest;

  @GET  
  public Response foo() {  
    httpRequest.getContentType(); //or whatever else you want to do with it
  }
}

但我还没有找到任何静态方法。

1 个答案:

答案 0 :(得分:1)

如果您正在寻找一些安全解决方案,您可以使用servlet过滤器(创建实现Filter的类),或者您可以实现ContainerRequestFilter并通过覆盖filter来执行过滤。外部过滤器上下文元素始终只能在控制器(放置路径注释的位置)中访问,除了将其传递给所需的方法或对象之外,无法从控制器外部访问此类型的内容:

  @Context
private HttpServletRequest httpRequest;

  @GET  
  public Response foo() {  
    someMethod(httpRequest); //or whatever else you want to do with it
  }
}

希望这会有所帮助。