杰克逊可选字段空()vs null

时间:2017-09-13 23:55:43

标签: java json jackson

我试图在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);
}

0 个答案:

没有答案