Mat*_*att 5 java json jackson lombok deserialization
如果我有一个使用 Lombok 的课程:
\n\n@RequiredArgsConstructor\n@Getter\nclass Example {\n private final String id;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n并尝试将其反序列化
\n\n{\n \xe2\x80\x9cid\xe2\x80\x9d: \xe2\x80\x9ctest\xe2\x80\x9d\n}\nRun Code Online (Sandbox Code Playgroud)\n\nJackson 抛出一个异常,尽管至少提供了一个创建者,但它无法反序列化。
\n\n如果我再添加另一个final String向该类添加另一个字段,并将该字段添加到 JSON,则它会被反序列化,不会出现任何问题。
有谁知道\xe2\x80\x99s 这里发生了什么?如果只有一个字段,为什么无法反序列化?
\n当初始化对象属性的唯一方法是通过构造函数时,杰克逊需要被告知应该通过@JsonCreator注释使用构造函数进行反序列化。
此外,所有属性名称都应通过注释提供@JsonProperty,因为 Jackson 需要知道构造函数中传递的属性的顺序,以便将 json 值正确映射到 Java 对象属性。
因此,如果您不使用 lombok 构造函数,那么构造函数将如下所示
@JsonCreator
public Example (@JsonProperty("id") String id) {
this.id = id;
}
Run Code Online (Sandbox Code Playgroud)
如果您不想手动编写构造函数,请继续@tashkhisi 的答案。
另外,我非常怀疑是否会发生以下情况。您可以用显示此内容的代码更新问题吗?
如果我随后向该类添加另一个最终 String 字段,并将该字段添加到 JSON,则它会被反序列化,不会出现任何问题。
| 归档时间: |
|
| 查看次数: |
1517 次 |
| 最近记录: |