了解杰克逊的反序列化(fasterxml)

时间:2018-02-12 10:07:17

标签: java jackson json-deserialization lombok fasterxml

How does Jackson deserialisation work when creating a Java object from JSON?
  

一个常见的概念是它首先调用No Argument Constructor和   然后继续打电话给塞特犬。

但是

  • 如果没有No Argument Constructor会怎样?
  • 杰克逊可以被问到 选择其他一些构造函数?
  • Boilerplate有什么问题吗? 代码生成器如Lombok?

1 个答案:

答案 0 :(得分:3)

  

简而言之,Jackson首先调用构造函数来实例化一个对象   然后继续在剩余的字段上调用setter。

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

  • 如果构造函数上没有定义特殊注释,Jackson将始终寻找No Argument Constructor 。我们很快就会收到特别的注释。 如果杰克逊没有找到No Argument构造函数,则会抛出错误。
  • 由于fastxml 2.7,杰克逊也会寻找@ConstructorProperties annotation 。如果多个构造函数具有此批注,它将选择具有最大参数的构造函数。对于其他字段,它会调用它们的setter。
  • 您还可以使用@JsonCreator来调用特定的构造函数。但是@ConstructorProperties仍然会干扰它。即使可以在单个构造函数上使用@JsonCreator,也可以在许多构造函数上使用@ConstructorProperties。
  • Lombok使用@ConstructorProperties批注注释其All Args构造函数。所以这可能会影响杰克逊的默认工作。