Sharing Data Between JAX-RS Filters
A straight and to the point post on JAX-RS filters. Great for anyone using the popular standard for their REST services.
Join the DZone community and get the full member experience.
Join For FreeThis is a quick post which points out how to share contextual user-defined (custom) data between JAX-RS filters
Filter Execution
- It is chain based: one filter gets executed after another
- Request filters are executed before Response filters
- If a filter throws an exception, the chain breaks and other filters are skipped i.e. an exception from a Request filter will auto-abort all other Request filters. The same is applicable to Response filters
For more info, please do check out one of my existing blog posts which discussed JAX-RS server side processing pipeline in depth
Sharing Data b/w Filters
JAX-RS API enables sharing of user-defined data amongst filters associated with a particular request
- It is abstracted in the form of a Map<String,Object> (pretty natural choice) via the ContainerRequestContext interface
- Get all the custom properties using the getPropertyNames() method
- The value of a specific property can be fetched (from the Map) using getProperty(String name)
- Overwrite an existing property or add a new one using setProperty(String name, Object val)
Examples
Here is how multiple Request filters can share user-defined contextual data amongst themselves
Another example where a Response filter uses the contextual dataset by a Request filter
To Be Noted…
The same capability is available in the Client side JAX-RS filters as well. The only difference is that you would be interacting with an instance of the ClientRequestContext
Further Reading
Cheers !
Published at DZone with permission of Abhishek Gupta, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments