Appearance
Jackson 3-使用Optional类型
本文主要介绍了如何在Jackson中处理Optional类型。参考链接:https://www.baeldung.com/jackson-optional。
首先准备测试程序:
java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {
private String title;
private Optional<String> subTitle;
}java
@Test
void test() throws JsonProcessingException {
Book book = new Book("读者", Optional.of("副标题"));
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(book);
System.out.println(jsonString);
}运行上述代码,控制台报错:
DANGER
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 optional type java.util.Optional<java.lang.String> not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jdk8" to enable handling (through reference chain: org.example.entity.Book["subTitle"])
根据提示提示,我们需要添加jackson-datatype-jdk8模块。
xml
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>2.18.2</version>
</dependency>然后,还需要在ObjectMapper实例上注册JDK8类型模块。
java
objectMapper.registerModule(new Jdk8Module());现在我们就可以顺利输出JSON字符串了:
txt
{"title":"读者","subTitle":"副标题"}我们也可以进行反序列化:
java
@Test
void test02() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new Jdk8Module());
String jsonString = "{\"title\":\"读者\",\"subTitle\":null}";
Book book = objectMapper.readValue(jsonString, Book.class);
System.out.println(book);
}txt
Book(title=读者, subTitle=Optional.empty)