【问题标题】:Understanding of deserialisation of Jackson (fasterxml)Jackson反序列化的理解(fasterxml)
【发布时间】:2023-04-02 15:45:02
【问题描述】:
How does Jackson deserialisation work when creating a Java object from JSON?

一个常见的概念是它首先调用无参数构造函数,然后 然后继续调用 setter。

但是

  • 如果没有无参数构造函数会怎样?
  • 可以要求杰克逊 选择其他构造函数?
  • Boilerplate 是否有任何问题 像 Lombok 这样的代码生成器?

【问题讨论】:

    标签: java jackson json-deserialization lombok fasterxml


    【解决方案1】:

    简单来说,Jackson 首先调用构造函数来实例化一个对象 然后继续调用剩余字段的设置器。

    现在,它如何决定调用哪个构造函数以及剩余的字段是什么?

    • 如果没有在构造函数上定义特殊注解,Jackson 将始终寻找 No Argument Constructor。我们将很快进行特殊注释。 如果 Jackson 没有找到 No Argument 构造函数,则会抛出错误。
    • 从 fasterxml 2.7 开始,Jackson 还寻找 @ConstructorProperties annotation。如果多个构造函数具有此注释,它将选择具有最大参数的一个。对于其余字段,它调用它们的 setter。
    • 您也可以使用@JsonCreator 调用特定的构造函数。但是@ConstructorProperties 仍然会干扰它。即使@JsonCreator 可以用于单个构造函数,@ConstructorProperties 也可以用于多个构造函数。
    • Lombok 使用 @ConstructorProperties 注释对其 All Args 构造函数进行注释。所以这可能会干扰默认 Jackson 的工作。

    【讨论】:

    • 我觉得看官方文档比较容易:-)
    • 欢迎您的评论@oleg.cherednik ,您能否也放一个指向官方文档的链接来解释这一点?可能对正在阅读本文的人有所帮助。
    • 非常有帮助:)
    猜你喜欢
    • 1970-01-01
    • 2015-05-19
    • 2013-09-16
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    相关资源
    最近更新 更多