为什么Jackson不能用 RequiredArgsConstructor反序列化单字段类?

问题描述 投票:0回答:1

如果我有一个使用Lombok.Jackson的类,并试图从Lombok.Jackson中反序列化它。

@RequiredArgsConstructor
@Getter
class Example {
  private final String id;
}

并尝试从

{
  “id”: “test”
}

杰克逊抛出一个异常,虽然至少提供了一个创建者,但它不能反序列化。

如果我再添加一个 final String 字段到该类,并将该字段添加到JSON中,它被反序列化,没有任何抱怨。

有人知道这是怎么回事吗?如果你只有一个字段,为什么不能反序列化?

java json jackson deserialization lombok
1个回答
0
投票

当初始化对象属性的唯一方式是通过contructor时,Jackson需要被告知反序列化应该使用构造函数通过 @JsonCreator 注解。

另外,所有的属性名都应该通过 @JsonProperty 注解,因为Jackson需要知道contructor中传递的属性序列来正确地将json值映射到Java对象属性。

所以,如果你没有使用lombok contructor,那么构造函数就会像下面这样

    @JsonCreator
    public Example (@JsonProperty("id") String id) {
        this.id = id;
    }

如果你不想手动写contructor,可以继续使用@tashkhisi的答案。

另外,我非常怀疑下面的情况是否会发生。你能不能更新一下问题,用代码来显示这个问题?

如果我再在该类中添加另一个final String字段,并将该字段添加到JSON中,它就会被反序列化,没有任何抱怨。

© www.soinside.com 2019 - 2024. All rights reserved.