# Jackson Optional 数据绑定错误

**URL:** <https://www.isharkfly.com/t/jackson-optional/15712>\
**Category:** 程序语言\
**Tags:** java\
**Created:** [May 5, 2024, 5:53pm UTC](https://www.isharkfly.com/t/jackson-optional/15712 "2024-05-05T17:53:01Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [May 5, 2024, 5:53pm UTC](https://www.isharkfly.com/t/jackson-optional/15712/1 "2024-05-05T17:53:01Z")

</div>

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

错误栈信息如下：

```plaintext
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"])

```

 ![image](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/e/e6fa53dd836102d5b98c10b2cc66385926c1a52b.png)

## 问题和解决

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

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

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

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

```

然后正常使用即可。
