## Package com.sun.jersey.api.json

Provides support for enabling and configuring JSON.

See:
Description

Interface Summary
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 Summary
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 Summary
JSONConfiguration.Notation: Enumeration of supported JSON notations.
JSONJAXBContext.JSONNotation: Deprecated.

## Package com.sun.jersey.api.json Description

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 `javax.ws.rs.ext.ContextResolver` returns a configured `JSONJAXBContext` instance.

For example, if the following two JAXB beans are defined:

>      @XmlRootElement
>      public class BeanOne {
>        public String name;
>        public int number;
>      }

>      @XmlRootElement
>      public class BeanTwo {
>        public List<String> titles;
>      }

And the following resource class uses the above JAXB beans:

>      @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<String>(1){{add("Title1");}};
>            return two;
>        }

Then, for the URI path `beans/one`, the following JSON will be produced:

>      {"name":"Howard","number":"3"}

However, it might be required that the JSON object named `number` have a non-String value `3`.

And, for the URI path `beans/two`, the following JSON will be produced:

>      {"titles":"Title1"}

However, it might be required that the JSON object named `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:

>      @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;
>        }
>      }

Then, the produced JSON would become: `{"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 © 2017 Oracle Corporation. All Rights Reserved.