|
||||||||||
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
See:
Description
Class Summary | |
---|---|
JSONJAXBContext | An adaption of JAXBContext that supports marshalling
and unmarshalling of JAXB beans using the JSON format. |
Enum Summary | |
---|---|
JSONJAXBContext.JSONNotation | Enumeration of supported JSON notations. |
Provides support for enabling and configuring JSON.
Besides enabling JSON, the API also allows customization of the JSON format
produced and consumed with JAXB beans.
Such customization requires that an implementation of
ContextResolver
returns a configured
JSONJAXBContext
instance.
For example, if the following two JAXB beans are defined:
And the following resource class uses the above JAXB beans:@XmlRootElement public class BeanOne { public String name; public int number; } @XmlRootElement public class BeanTwo { public List<String> titles; }
@Path("beans") public class MyResource { @GET @Path("one") @Produces(MediaType.APPLICATION_JSON) public BeanOne getOne() { BeanOne one = new BeanOne(); one.name = "Howard"; one.number = 3; return one; } @GET @Path("two") @Produces(MediaType.APPLICATION_JSON) public BeanTwo getTwo() { BeanTwo two = new BeanTwo(); two.titles = new ArrayList(1){{add("Title1");}}; return two; }
Then, for the URI path beans/one
, the following JSON will be
produced:
However, it might be required that the JSON object named{"name":"Howard","number":"3"}
number
have
a non-String value 3
.
And, for the URI path beans/two
, the following JSON will be
produced:
However, it might be required that the JSON object named{"titles":"Title1"}
titles
have a JSON array value ["Title1"]
,
since the titles
field on the JAXB bean BeanTwo
represents an array, thus enabling consuming of such JSON values the same way on
the client side no matter how many elements the array contains.
The JSONJAXBContext
may be configured to enabled
such required production of JSON as described above in the following manner:
Then, the produced JSON would become:@Provider public final class JAXBContextResolver implements ContextResolver<JAXBContext> { private final JAXBContext context; private final Set<Class> types; private final Class[] cTypes = {BeanOne.class, BeanTwo.class}; public JAXBContextResolver() throws JAXBException { Map<String, Object> props = new HashMap<String, Object>(); props.put(JSONJAXBContext.JSON_ROOT_UNWRAPPING, Boolean.TRUE); props.put(JSONJAXBContext.JSON_NON_STRINGS, new HashSet<String>(1){{add("number");}}); props.put(JSONJAXBContext.JSON_ARRAYS, new HashSet<String>(1){{add("titles");}}); this.context = new JSONJAXBContext(cTypes, props); this.types = new HashSet(Arrays.asList(cTypes)); } public JAXBContext getContext(Class<?> objectType) { return (types.contains(objectType)) ? context : null; } }
{"name":"Howard","number":3}
and {"titles":["Title1"]}
respectively for the URI paths
beans/one
and beans/two
.
For a complete set of supported properties, see
JSONJAXBContext
.
|
||||||||||
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |