JAX-RS is awesome to say the least and one of my favorites! Why?
- Feature rich
- Intuitive (hence the learning curve is not as steep)
- Easy-to-use and develop with
- Has great RIs – Jersey, RestEasy etc
There are enough JAX-RS fans out there who can add to this!
JAX-RS 2.0 is the latest version of the JSR 311 specification and it was released along with Java EE 7.
Life without @BeanParam
Before JAX-RS 2.0, in order to pass/inject information from an HTTP request into JAX-RS resource implementation methods, one could
- Include multiple method arguments annotated with @FormParam, @PathParam, @QueryParam etc
- Or, have a model class backed by JAXB/JSON or a custom MessageBodyReader implementation for JAX-RS Provider to be able to unmarshall the HTTP message body to a Java object – read more about this in one of my previous posts
This means that something like a HTML5 based client would need to extract the FORM input, convert it into JSON or XML payload and then POST it over the wire.
Simplification in JAX-RS 2.0
This process has been simplified by introduction of the @BeanParam annotation. It helps inject custom value/domain/model objects into fields or method parameters of JAX-RS resource classes.
In case you want to refer to the code (pretty simple) or download the example/run it yourself, here is the GitHub link
All we need to do is, annotate the fields of the model (POJO) class with the injection annotations that already exist i.e. @PathParam, @QueryParam, @HeaderParam, @MatrixParam etc – basically any of the @xxxParam metadata types and
Make sure that we include the @BeanParam annotation while injecting a reference variable of this POJO (only on METHOD, PARAMETER or FIELD).
JAX-RS provider automatically constructs and injects an instance of your domain object which you can now use within your methods.
Just fill in the form information and POST it!
That’s it. . . Short and Sweet!