https://github.com/zapodot/jackson-databind-java-optional
A shim library to support mapping Java8 Optionals through Jackson.
https://github.com/zapodot/jackson-databind-java-optional
jackson-json-processor java java-8 optional
Last synced: 6 months ago
JSON representation
A shim library to support mapping Java8 Optionals through Jackson.
- Host: GitHub
- URL: https://github.com/zapodot/jackson-databind-java-optional
- Owner: zapodot
- License: other
- Created: 2014-06-17T13:05:00.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2016-07-17T17:19:30.000Z (over 9 years ago)
- Last Synced: 2025-07-27T17:56:45.233Z (7 months ago)
- Topics: jackson-json-processor, java, java-8, optional
- Language: Java
- Homepage:
- Size: 93.8 KB
- Stars: 15
- Watchers: 1
- Forks: 4
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: license.txt
Awesome Lists containing this project
README
# jackson-databind-java-optional
[](https://travis-ci.org/zapodot/jackson-databind-java-optional)
[](https://coveralls.io/r/zapodot/jackson-databind-java-optional?branch=master)
[](http://mvnrepository.com/artifact/org.zapodot/jackson-databind-java-optional)
[](https://github.com/igrigorik/ga-beacon)
A shim library to support mapping Java 8 Optional through Jackson. Forked from @realjenuis jackson-databind-java8 project.
This library is compiled with Java 8 and will thus only be useful in a Java 8 (or higher) runtime environment.
## Alternatives ##
If you are starting a new project that requires support for Java 8 combined with Jackson Databind, you should probably have a look at [FasterXML's JDK 8 module](//github.com/FasterXML/jackson-datatype-jdk8).
## Usage
The library is distributed through Sonatype's OSS repo
### Maven dependency
```xml
org.zapodot
jackson-databind-java-optional
2.6.1
```
### SBT
```scala
libraryDependencies += "org.zapodot" % "jackson-databind-java-optional" % "2.6.1"
```
### Registering module
The module is auto-discoverable using the Jackson ObjectMappers's findAndRegisterModules method
```java
final ObjectMapper mapper = new ObjectMapper().findAndRegisterModules();
```
If you are not to crazy about using auto discovery, you can always register the module manually
```java
final ObjectMapper objectMapper = new ObjectMapper()
.registerModule(
new JavaOptionalModule());
```
### Serialization
Empty Optionals will be serialized as JSON nulls.
Example:
```java
public class Bean {
public static final String PRESENT_VALUE = "present";
@JsonProperty
private Optional empty = Optional.empty();
@JsonProperty
private Optional notSet;
@JsonProperty
private Optional present = Optional.of(PRESENT_VALUE);
public static void serialize() {
final ObjectMapper mapper = new ObjectMapper().findAndRegisterModules();
final String json = mapper.writeValueAsString(new Bean());
System.out.println(json); // will print '{"empty":null,"notSet":null,"present":"present"}'
}
}
```
### Deserialization
Nulls will be deserialized as _Optional.empty()_
Example:
```java
public class JavaOptionalDeserializeTest {
public static class Bean {
public static final String PRESENT_VALUE = "present";
@JsonProperty
private Optional empty = Optional.empty();
@JsonProperty
private Optional notSet;
@JsonProperty
private Optional present = Optional.of(PRESENT_VALUE);
}
@Test
public void testDeserialize() throws Exception {
final Bean bean = new ObjectMapper().findAndRegisterModules()
.readValue("{\"empty\":null,\"notSet\":null}", Bean.class);
assertNotNull(bean.empty);
assertEquals(Optional.empty(), bean.empty);
assertNotNull(bean.notSet);
assertEquals(Optional.empty(), bean.notSet);
assertEquals(Optional.of(Bean.PRESENT_VALUE), bean.present);
}
}
```