| [//]: # " Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved. " |
| [//]: # " " |
| [//]: # " This program and the accompanying materials are made available under the " |
| [//]: # " terms of the Eclipse Distribution License v. 1.0, which is available at " |
| [//]: # " http://www.eclipse.org/org/documents/edl-v10.php. " |
| [//]: # " " |
| [//]: # " SPDX-License-Identifier: BSD-3-Clause " |
| |
| Jackson JAX-RS JSON Provider Example |
| ==================================== |
| |
| This example demonstrates how to produce/consume JSON representations |
| from Java objects. This applies not only to JAXB beans, as shown in the |
| `json-from-jaxb` example but also to ordinary, un-annotated, POJOs. |
| |
| This example hosts three simple read-only resources: One provides an |
| example of using a Jackson JSON provider (registered by the feature |
| `JacksonFeature` in the `MyApplication` class) instead of using JAXB |
| (Object->JAXB->JSON) which has some limitations (e.g. empty arrays |
| in JAXB beans). For this resource the JSON representation is produced by |
| the Jackson JAX-RS provider, while the XML representation is generated |
| by JAXB as usual. The second web resource is based on a simple |
| un-annotated POJO and provides only JSON-based representations: JSON and |
| JSON with padding (JSONP). The third resource depicts how Jackson and |
| JAXB annotations could be mixed together within a single POJO. |
| |
| Contents |
| -------- |
| |
| The "empty array" web resource is implemented by the `org.glassfish.jersey.examples.jackson.EmptyArrayResource` class. |
| |
| The "non JAXB" web resource is implemented by the `org.glassfish.jersey.examples.jackson.NonJaxbBeanResource` class. |
| |
| Both resources use the default Jackson mapper configuration to serialize JSON |
| data out and depicts the corner cases, where the Jersey internal, StAX |
| based, JSON processing can not be utilized. |
| |
| The `org.glassfish.jersey.examples.jackson.CombinedAnnotationResource` |
| class is used to show how JAXB and Jackson annotations could be combined |
| together in one Java bean for JSON serialization. See the |
| |
| `org.glassfish.jersey.examples.jackson.MyObjectMapperProvider` class |
| where Jackson specific options are used to set up the desired JSON |
| serialization configuration. |
| |
| The mapping of the URI path space is presented in the following table: |
| |
| URI path | Resource class | HTTP method |
| ---------------------------- | ---------------------------- | ------------- |
| **_/emptyArrayResource_** | EmptyArrayResource | GET |
| **_/nonJaxbResource_** | NonJaxbBeanResource | GET |
| **_/combinedAnnotations_** | CombinedAnnotationResource | GET |
| |
| To use Jackson specific configuration options, one can implement a |
| `ContextResolver<ObjectMapper>` provider. For an example of such an |
| implementation, see the `MyObjectMapperProvider` class. |
| |
| Running the Example |
| ------------------- |
| |
| Run the example as follows: |
| |
| > mvn clean compile exec:java |
| |
| This deploys the example using[Grizzly](http://grizzly.java.net/) |
| |
| A [WADL description](http://wadl.java.net/#spec) may be accessed at the URL: |
| |
| - <http://localhost:8080/jackson/application.wadl> |
| |
| The three resources are available at |
| |
| - <http://localhost:8080/jackson/emptyArrayResource> |
| - <http://localhost:8080/jackson/nonJaxbResource> |
| - <http://localhost:8080/jackson/combinedAnnotations> |
| |
| To easily obtain the different output types available, |
| [cURL](http://curl.haxx.se/) can be used as follows: |
| |
| Obtain the JSON output of EmptyArrayResource (use |
| `-HAccept:application/xml` for XML output): |
| |
| > curl -HAccept:application/json http://localhost:8080/jackson/emptyArrayResource |
| |
| Obtain the JSON output of NonJaxbBeanResource (use `-HAccept:application/javascript` for JSONP output): |
| |
| > curl -HAccept:application/json http://localhost:8080/jackson/nonJaxbResource |
| |
| Obtain the JSON output of CombinedAnnotationResource: |
| |
| > curl -HAccept:application/json http://localhost:8080/jackson/combinedAnnotations |