Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES

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

Provides support for enabling and configuring JSON.

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.

## 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 `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(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 enabled 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 {
>            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;
>        }
>      }

Then, the produced JSON would become: `{"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`.

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES

Copyright © 2008 Sun Microsystems, Inc. All Rights Reserved.