See: Description
Interface | Description |
---|---|
JSONConfigurated |
An interface declaring a JSON configuration is available.
|
JSONMarshaller |
A JSON marshaller responsible for serializing Java content trees, defined
by JAXB, to JSON data.
|
JSONUnmarshaller |
A JSON unmarshaller responsible for deserializing JSON data to a Java
content tree, defined by JAXB.
|
Class | Description |
---|---|
JSONConfiguration |
An immutable configuration of JSON notation and options.
|
JSONConfiguration.Builder |
Builder class for constructing
JSONConfiguration options |
JSONConfiguration.MappedBuilder |
Builder class for constructing
JSONConfiguration options
for the JSONConfiguration.Notation.MAPPED convention. |
JSONConfiguration.MappedJettisonBuilder |
Builder class for constructing
JSONConfiguration options
for the JSONConfiguration.Notation.MAPPED_JETTISON convention. |
JSONConfiguration.NaturalBuilder |
Builder class for constructing
JSONConfiguration options
for the JSONConfiguration.Notation.NATURAL convention. |
JSONJAXBContext |
An adaption of
JAXBContext that supports marshalling
and unmarshalling of JAXB beans using the JSON format. |
JSONWithPadding |
An entity supporting JSON with Padding (JSONP).
|
Enum | Description |
---|---|
JSONConfiguration.Notation |
Enumeration of supported JSON notations.
|
JSONJAXBContext.JSONNotation | Deprecated |
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 enable
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 { this.context = new JSONJAXBContext(JSONConfiguration.natural().build(), cTypes); 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
. Please note, that you do not need
to configure this in much detail. Using JSONConfiguration.Notation.NATURAL
notation
means that Jersey JSON processor will autamatically take care about numbers, booleans and arrays. This notation
will probably become the default one for Jersey in one of the future releases.
For a complete set of supported properties, see
JSONConfiguration.Builder
.
Copyright © 2016 Oracle Corporation. All Rights Reserved.