इस तरह की (JAX-आरएस 2.0 एपीआई के लिए कार्यान्वयन को रोकने के लिए सक्षम होने के लिए अच्छा होगा)।
आपके पास अपना लक्ष्य प्राप्त करने के दो तरीके हैं।
1. उपयोग नाम बाइंडिंग:
1,1 @NameBinding साथ एनोटेट कस्टम टिप्पणी बनाएं:
@NameBinding
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationForResourceOne {}
1,2। अपनी एनोटेशन के साथ फ़िल्टर बनाएं:
@Provider
@PreMatching
@AnnotationForResourceOne
public class ResourceOneFilter implements ContainerRequestFilter {
...
}
1.3। और चयनित संसाधन विधि के साथ बनाया फिल्टर बाँध:
@Path("/resources")
public class Resources {
@GET
@Path("/resourceOne")
@AnnotationForResourceOne
public String getResourceOne() {...}
}
2. उपयोग DynamicFeature:
2,1। फ़िल्टर बनाएं:
public class ResourceOneFilter implements ContainerRequestFilter {
...
}
2.2। 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);
}
}
}
इस परिदृश्य में:
- फिल्टर
@Provider
एनोटेशन के साथ एनोटेट नहीं है;
configure(...)
प्रत्येक संसाधन विधि के लिए विधि लागू की जाती है;
ctx.register(filter)
संसाधन विधि के साथ फ़िल्टर को बांधता है;
डायनामिक फीचर एक आकर्षण की तरह काम करता था। –
क्या आप निश्चित हैं कि नामबाइंडिंग उदाहरण में '@ प्रीमैचिंग 'एनोटेशन की आवश्यकता है? – Zakhar
नाम बाइंडिंग मेरे लिए काम नहीं करती – Kunal