当反序列化JSON字符串时,缺少的属性将被设置为"null",而不应该设置为"null".以下是POJO类:

    @Builder
    @Getter
    @Setter
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @NoArgsConstructor
    @AllArgsConstructor
    @ToString
    @EqualsAndHashCode
    static class MyPojo {
        
        @JsonProperty(value = "OptionalProp", required = false, defaultValue = "")
        @Builder.Default
        @Nullable
        @JsonSetter(value = "", nulls = Nulls.AS_EMPTY)
        private String optionalProp = "";
    
        @JsonProperty(value = "RequiredProp", required = false, defaultValue = "")
        @Builder.Default
        @Nullable
        @JsonSetter(value = "", nulls = Nulls.AS_EMPTY)
        private String requiredProp = "";
    }

要反序列化的JSON字符串:

{
  "RequiredProp" : "test"
}

以下是反序列化:

private final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private final myPojo = OBJECT_MAPPER.readValue(inputStream, MyPojo.class);

以下是输出:

MyPojo(optionalProp=null, requiredProp=test)

但使用builder创建POJO:

        final MyPojo myPojo = MyPojo.builder()
            .requiredProp("test")
            .build();

导致以下POJO:

MyPojo(optionalProp=, requiredProp=test)

我正在使用:

Jackson-databind 2.12.x
Jackson-annotation 2.12.x
Jackson-core 2.12.x

这些软件包中是否有微小的版本更改会改变行为?

推荐答案

这个问题源于龙目舞,而不是真正的杰克逊音乐.查看生成的源代码可以让您清楚地了解正在发生的事情.使用Builder.Default似乎会导致这个问题,因为它显然会产生混乱的代码,从而删除现有的初始化.删除注释可恢复正常行为.

这似乎是龙目岛的一个问题,here年前就有记录.删除注释应导致正确的行为.

Java相关问答推荐

Quarkus keycloat配置不工作.quarkus. keycloak. policy—enforcer. enable = true在. yaml表示中不工作

@org.springframework.beans.factory.annotation.Autowired(required=true)-注入点有以下注释:-SpringBoot

Java .类参数不通过构造函数传递

滚动视图&不能在alert 对话框中工作(&Q;&Q;)

如何创建同一类的另一个对象,该对象位于变量中?

由于我在Main方法中关闭了 scanner ,但在该方法中创建了一个新的 scanner ,因此出现了错误

如何在Java中从XML中获取特定的 node ,然后将其删除?

Com.example.service.QuestionService中的构造函数的参数0需要找不到的类型为';com.example.Dao.QuestionDao;的Bean

Java中不兼容的泛型类型

在Spring Boot JPA for MySQL中为我的所有类创建Bean时出错?

如何使用WebEnvironment.RANDOM_PORT获得第二个随机端口?

接受类及其接口的Java类型(矛盾)

当我将JTextField的getText函数与相等的String进行比较时;t返回true

按长度排序字符串数组

rest api服务 spring 启动中出现IllegalFormatConversionException

如何使用外部函数从Java中获取C++ struct 的返回值&;内存API

Springboot应用程序无法识别任何@RestController或@Service,我认为@Repository也无法识别

为什么 Random() 的行为不符合预期?

如何在Java中调用对象上预定义的接口方法列表?

Hibernate 6 + 类的属性持久化为字符串