Jackson Optional 数据绑定错误

在对象中使用 Optional 字段的时候可能会出现数据绑定错误。

错误栈信息如下:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.util.Optional` (no Creators, like default constructor, exist): no String-argument constructor/factory method to deserialize from String value ('foo')
 at [Source: (String)"{ "title": "Oliver Twist", "subTitle": "foo" }"; line: 1, column: 40] (through reference chain: com.ossez.jackson.optionalwithjackson.Book["subTitle"])

问题和解决

上面的问题出现在数据绑定的时候的问题。

因为 Optional 是 JDK 8 中才出现的。

所以我们需要增加一个针对 JDK 8 的数据绑定。

<dependency>
   <groupId>com.fasterxml.jackson.datatype</groupId>
   <artifactId>jackson-datatype-jdk8</artifactId>
   <version>2.17.0</version>
</dependency>

然后正常使用即可。