我试图在POJO中使用Optional来指示json字段何时可以为null,不存在或存在。我的问题是我无法弄清楚如何配置jackson以不将Optional.empty()
和null
视为相同。对于empty()
,我希望忽略该字段。没有任何JsonInclude值似乎这样做。 Jdk8Module#configureAbsentsAsNulls()
看起来很有希望,但它并没有改变我的测试结果。有没有办法做到这一点?
TL;博士
null
值{em> 应序列化,Optional.empty()
不应序列化。
以下是一些展示我试图实现的行为的测试。
class POJO {
public Optional<String> content;
}
private ObjectMapper getMapper() {
return new ObjectMapper().registerModule(new Jdk8Module());
}
@org.junit.Test
public void testAbsent() throws JsonProcessingException {
ObjectMapper mapper = getMapper();
POJO pojo = new POJO();
pojo.content = Optional.empty();
String result = mapper.writeValueAsString(pojo);
assertEquals("{}", result);
}
@org.junit.Test
public void testNull() throws JsonProcessingException {
ObjectMapper mapper = getMapper();
POJO pojo = new POJO();
pojo.content = null;
String result = mapper.writeValueAsString(pojo);
assertEquals("{\"content\":null}", result);
}
@org.junit.Test
public void testPresent() throws JsonProcessingException {
ObjectMapper mapper = getMapper();
POJO pojo = new POJO();
pojo.content = Optional.of("Hello");
String result = mapper.writeValueAsString(pojo);
assertEquals("{\"content\":\"Hello\"}", result);
}