| [//]: # " Copyright (c) 2015, 2020 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](https://projects.eclipse.org/projects/ee4j.grizzly) | |
| 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 |