How does Jackson deserialisation work when creating a Java object from JSON?
一个常见的概念是,它首先称为no参数构造函数和 然后继续致电设置器。
但,
- 如果没有参数构造函数会发生什么?
- 可以要求杰克逊去选择其他构造函数?
- 样板是否有任何问题像Lombok这样的代码生成器?
简单地说,杰克逊首先调用构造函数来实例化对象 然后继续在其余字段上调用设定器。
现在,它如何决定要拨打哪个构造函数?剩下的字段是什么?
- 如果在构造函数上没有定义特殊注释,杰克逊将始终寻找不参数constructor 。我们很快就会进行特别注释。如果杰克逊找不到没有参数构造函数,它将丢弃错误。
- 由于fasterxml 2.7, Jackson还寻找@constructorproperties注释。如果多个具有此注释的构造函数,它将选择具有最大参数的构造函数。对于其余的字段,它称为他们的设定器。
- 您也可以使用@jsoncreator调用特定的构造函数。但是@constructorProperties仍会干扰它。即使可以在单个构造函数上使用@jsoncreator,也可以在许多构造函数上使用。
- LOMBOK用@ConstructorProperties注释注释其所有ARG构造函数。因此,这可能会干扰默认的杰克逊工作。