如果我有一个使用Lombok.Jackson的类,并试图从Lombok.Jackson中反序列化它。
@RequiredArgsConstructor
@Getter
class Example {
private final String id;
}
并尝试从
{
“id”: “test”
}
杰克逊抛出一个异常,虽然至少提供了一个创建者,但它不能反序列化。
如果我再添加一个 final String
字段到该类,并将该字段添加到JSON中,它被反序列化,没有任何抱怨。
有人知道这是怎么回事吗?如果你只有一个字段,为什么不能反序列化?
当初始化对象属性的唯一方式是通过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中,它就会被反序列化,没有任何抱怨。