根据文档,应该可以使用DynamicFeature https://docs.oracle.com/javaee/7/api/javax/ws/rs/container/DynamicFeature.html对于资源和子资源。作为效果,我希望每当调用子资源端点时都会注册和调用过滤器 - 即GET /some/sub/x
。但是以下对我不起作用(也不适合其他类似的方法):
-
注解
@NameBinding
@Target({METHOD, TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface SomeFilterAnn {}
-
resource
@SomeFilterAnn
@Path("/some")
public class SomeResource {
@GET
public String getSome() {
return "some";
}
@Path("/sub")
public SubResource getSub() {
return new SubResource();
}
@SomeFilterAnn
@Path("/x")
public static class SubResource {
@GET
public String getSome() {
return "sub";
}
}
}
-
过滤器(它实际上更复杂并且配置为DynamicFilter
)
@SomeFilterAnn
public class SomeFilter implements ContainerRequestFilter {
private static final Logger LOG = LoggerFactory.getLogger(SomeFilter.class);
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
LOG.info("filter called");
}
}
-
here is DynamicFeature
我想注册资源和子资源的过滤器。其实我希望configure()
也会被要求SubResource
so resourceInfo.getResourceClass() == SubResource.class
但无法实现这一点。
@Provider
public class SomeDynamicFeature implements DynamicFeature {
private static final Logger LOG = LoggerFactory.getLogger(SomeDynamicFeature.class);
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext context) {
Class<?> resourceClass = resourceInfo.getResourceClass();
// this works
if (resourceClass == SomeResource.class) {
LOG.info("register resource filter");
context.register(new SomeFilter(/*some config*/));
}
// this does not work (not called for Subresource)
if (resourceClass == SomeResource.SubResource.class) {
LOG.info("register resource filter");
context.register(new SomeFilter(/*some config*/));
}
// this also does not work (filter not called for Subresource)
if (resourceInfo.getResourceMethod().getReturnType() == SomeResource.SubResource.class) {
LOG.info("register subresource filter");
context.register(new SomeFilter(/*some config*/));
}
}
}
我在 WildFly 8.2 上使用 CXF 运行此程序,但没有 Jersey 或 RESTEasy
EDIT
我发现注释SomeFilter
with @Provider
允许过滤器工作而无需DynamicFeature
但是我不知道如何配置我的过滤器 - 这是单独的问题 https://stackoverflow.com/questions/33329853/how-can-i-provide-configuration-to-jax-rs-provider-annotated-containerrequestfi关于它。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)