如何使不可变库跳过序列化可选字段

How to make Immutables library skip serializing Optional fields

我正在使用不可变库 (https://immutables.github.io)。我需要我的 classes 序列化为 JSON(我使用 Jackson)。我想跳过输出中的可选字段 JSON。在 Immutables 之前,我在 class 级别提供了 @JsonInclude(JsonInclude.Include.NON_EMPTY)

看来,Immutables 不遵守该注释。 如果我用 @JsonInclude(JsonInclude.Include.NON_EMPTY) 注释每个可选字段,它工作正常。

是否可以使用 class 级(而非字段级)注解来指示不可变对象跳过对空可选对象的序列化?我看到 org.immutables.value.Value.Style#additionalJsonAnnotations 但没有使用它的自定义传递注释。

我的 class 路径中有 jackson-datatype-jdk8,我的 com.fasterxml.jackson.databind.ObjectMapper

mapper.registerModule(new Jdk8Module().configureAbsentsAsNulls(true));

自版本 v2.3.6(可能更早)起,问题已在 Immutables 中得到解决。 Immutables 尊重 Jackson 的 @JsonInclude@JsonPropertyOrder 和其他 class 级(或字段级)注释。这些注释被复制到生成的不可变 class 并且它们按预期工作。