100%, , , , . .
:
@NameBinding
@NameBinding
@Target({METHOD, TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Filtered {
}
@Filtered
@Provider
public class MyFilter implements ContainerRequestFilter {
, , , .
UPDATE
, . Netiher , .
, configure DynamicFeature (), .
1:
( )
Class<?> possibleSubResource =
resourceInfo.getResourceMethod().getDeclaringClass();
Resource
Resource resource = Resource.from(SomeResource.class);
, ,
for (Resource childResource : resource.getChildResources()) {
if (childResource.getResourceLocator() != null) {
, .
ResourceMethod sub = childResource.getResourceLocator();
Class responseClass = sub.getInvocable().getRawResponseType();
, 4 == 1.
if (responseClass == possibleSubResource) {
context.register(SomeFilter.class);
}
Resource. ( Resource, )
@Path("{id}")
public SomeSubResource getSubResource() {
return new SomeSubResource();
}
, ( : -)
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext context) {
Class<?> resourceClass = resourceInfo.getResourceClass();
if (resourceClass == SomeResource.class) {
context.register(SomeFilter.class);
}
Class<?> possibleSubResource = resourceInfo.getResourceMethod().getDeclaringClass();
Resource resource = Resource.from(SomeResource.class);
for (Resource childResource : resource.getChildResources()) {
if (childResource.getResourceLocator() != null) {
ResourceMethod sub = childResource.getResourceLocator();
Class responseClass = sub.getInvocable().getRawResponseType();
if (responseClass == possibleSubResource) {
context.register(SomeFilter.class);
}
}
}
}
2:
, , , Sub Resource, , @Path Http
( )
Class<?> possibleSubResource =
resourceInfo.getResourceMethod().getDeclaringClass();
Method
for (Method method : SomeResource.class.getDeclaredMethods()) {
, Http
boolean isHttpPresent = false;
for (Class annot : Arrays.asList(GET.class, POST.class, PUT.class, DELETE.class)) {
if (method.isAnnotationPresent(annot)) {
isHttpPresent = true;
break;
}
}
, @Path. , Http-,
if (method.isAnnotationPresent(Path.class) && !isHttpPresent) {
Class subResourceClass = method.getReturnType();
if (subResourceClass == possibleSubResource) {
context.register(SomeFilter.class);
}
}
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext context) {
Class<?> resourceClass = resourceInfo.getResourceClass();
if (resourceClass == SomeResource.class) {
context.register(SomeFilter.class);
}
Class<?> possibleSubResource = resourceInfo.getResourceMethod().getDeclaringClass();
for (Method method : SomeResource.class.getDeclaredMethods()) {
boolean isHttpPresent = false;
for(Class annot : Arrays.asList(GET.class,POST.class,PUT.class, DELETE.class)){
if (method.isAnnotationPresent(annot)) {
isHttpPresent = true;
break;
}
}
if(method.isAnnotationPresent(Path.class) && !isHttpPresent){
Class subResourceClass = method.getReturnType();
if (subResourceClass == possibleSubResource) {
context.register(SomeFilter.class);
}
}
}
}
, , , . , , , , . ( , ) , , , .