asieira asieira - 3 days ago 5
Java Question

Using Jackson ObjectMapper with Java 8 Optional values

I was trying to use Jackson to write a class value to JSON that has Optional as fields:

public class Test {
Optional<String> field = Optional.of("hello, world!");

public Optional<String> getField() {
return field;
}

public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(new Test()));
}
}


When executed, this class generates the following output:

{"field":{"present":true}}


I understand the present/not present field being included and could work around it when reading the JSON data, however I can't get around the fact that the actual content of the optional is never written to the output. :(

Any workarounds here except not using ObjectMapper at all?

Answer

You could use jackson-datatype-jdk8 which is described as:

Support for new JDK8-specific types, such as Optional

Comments