在对象中使用 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>
然后正常使用即可。