Presumo che si sta utilizzando Jersey 2.x (implementazione per JAX-RS 2.0 API).
Hai due modi per raggiungere il tuo obiettivo.
1. Usa nome binding:
1,1 crea annotazione personalizzati annotato con @NameBinding:
@NameBinding
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationForResourceOne {}
1,2. Crea filtro con la tua annotazione:
@Provider
@PreMatching
@AnnotationForResourceOne
public class ResourceOneFilter implements ContainerRequestFilter {
...
}
1.3. E si legano filtro realizzato con metodo risorsa selezionata:
@Path("/resources")
public class Resources {
@GET
@Path("/resourceOne")
@AnnotationForResourceOne
public String getResourceOne() {...}
}
2. Uso DynamicFeature:
2,1. Crea filtro:
public class ResourceOneFilter implements ContainerRequestFilter {
...
}
2.2. Implementare l'interfaccia javax.ws.rs.container.DynamicFeature:
@Provider
public class MaxAgeFeature implements DynamicFeature {
public void configure(ResourceInfo ri, FeatureContext ctx) {
if(resourceShouldBeFiltered(ri)){
ResourceOneFilter filter = new ResourceOneFilter();
ctx.register(filter);
}
}
}
In questo scenario:
- filtro non viene annotato con
@Provider
annotazioni;
configure(...)
metodo invocato per ogni metodo di risorsa;
ctx.register(filter)
associa il filtro con il metodo di risorsa;
DynamicFeature ha funzionato come un fascino. –
Sei sicuro che l'annotazione di '@ PreMatching' è necessaria nell'esempio NameBinding? – Zakhar
Nome binding non ha funzionato per me – Kunal