java使用注释写入Jersey中的ServletContext。
我有一门课是这样的:
public class MyResource(){
public MyResource(@Context ServletContext context){
context.setAttribute("someAttribute","someVal");
}
@PUT
public void someMethod(){
...
}
}
我希望使用注释(即JAX-RS/Jersey读取注释的值并将其写入ServletContext,以便我可以在请求范围中注入ServletContext的其他地方访问该值。)
@MyCustomAnnotation(name="someVal")
public class MyResource(){
}
# 1 楼答案
注释需要由一些代码处理
在调用方法之前,需要创建一个过滤器来处理自定义注释
见:https://jersey.java.net/documentation/latest/filters-and-interceptors.html
创建一个过滤器应该相当容易,但这还不够。它将被调用,但不知道在什么上下文中调用它。通过上下文,我的意思是在执行过滤器之后将调用哪个类/方法。在本例中,我假设您的注释(称为MyCustomAnnotation)可以应用于类/方法
为此,您需要创建一个“动态特性”,为每个可能的上下文绑定不同的过滤器实例
详情如下:
对于给定的JAX-RS类:
首先,创建注释(我想你知道,但只是为了清楚):
然后,创建一个过滤器。 请注意特殊构造函数。将为每个可能的上下文创建不同的筛选器实例。过滤器的正确实例将在特定上下文中使用。通过这种方式,它将知道在什么上下文中(类/方法)被调用。这样,使用内省,您的过滤器可以根据您在目标类和/或方法上使用的注释,以您喜欢的方式运行:
好的,现在我们有了一个注释,一个处理这个注释的过滤器,现在我们需要动态绑定到被注释的类/方法
在JAX-RS配置中。。。注册新的DynamicFeature
我希望这是清楚的。回顾一下你需要做什么
更新
您应该能够在运行时注入ressource信息,而不是使用动态功能