【发布时间】:2018-01-04 11:55:32
【问题描述】:
我在将 ResourceInfo 注入我的球衣过滤器时遇到问题。当有一个 spring 管理的过滤器实例时,注解 @Context 似乎不能正常工作。
我发现是这样的: Jersey Request Filter only on certain URI
第二个目标和我的情况很相似。
动态特性:
@Provider
public class HttpCacheConfigDynamicFeature implements DynamicFeature {
private final DefaultHttpCacheFilter defaultHttpCacheFilter;
private final HttpCacheFilter httpCacheFilter;
@Autowired
public HttpCacheConfigDynamicFeature(DefaultHttpCacheFilter defaultHttpCacheFilter, HttpCacheFilter httpCacheFilter) {
this.defaultHttpCacheFilter = defaultHttpCacheFilter;
this.httpCacheFilter = httpCacheFilter;
}
...
过滤器:
@Component
public class HttpCacheFilter implements ContainerResponseFilter {
private Log logger = LogFactory.getLog(HttpCacheFilter.class);
private final ConfigurationController configurationController;
@Context
private ResourceInfo resourceInfo;
@Autowired
public HttpCacheFilter(ConfigurationController configurationController) {
this.configurationController = configurationController;
}
...
资源信息始终为空。
我现在要做的就是稍微改变一下我的 dynamicFeature:
@Provider
public class HttpCacheConfigDynamicFeature implements DynamicFeature {
private final DefaultHttpCacheFilter defaultHttpCacheFilter;
private final ConfigurationController configurationController;
@Autowired
public HttpCacheConfigDynamicFeature(DefaultHttpCacheFilter defaultHttpCacheFilter, ConfigurationController configurationController) {
this.defaultHttpCacheFilter = defaultHttpCacheFilter;
this.configurationController = configurationController;
}
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext featureContext) {
if (hasHttpCacheConfigAnnotation(resourceInfo)) {
featureContext.register(new HttpCacheFilter(configurationController, resourceInfo), 50);
} else {
featureContext.register(defaultHttpCacheFilter, 51);
}
}
也许你知道一种更优雅的方式来实现我的目标。
谢谢!
克里斯托夫
【问题讨论】:
标签: java spring jersey jersey-2.0 servlet-filters