Jackson 是如何自动反序列化 java.nio.file.Path 的?

How does Jackson automatically deserialize java.nio.file.Path?

我不是在抱怨,而是想了解它为什么有效。

这是我的 Java class:

public static class ExampleClass {
  private Path target;

  public Path getTarget() {
    return target;
  }

  public void setTarget(Path target) {
    this.target = target;
  }
}

这是 JSON:

{
  "target": "some/path"
}

现在一个简单的测试表明它有效:

ObjectMapper mapper = new ObjectMapper();
ExampleClass exampleClass = mapper.readValue(json, ExampleClass.class);
assertEquals(Path.of("some/path"), exampleClass.getTarget());

但是怎么办? Path 中没有接受 String 的 (public) 构造函数。 Jackson 怎么知道它需要调用 Path.of()?

Jackson 的 ObjectMapper 带有开箱即用的预定义标准 serializers/deserializers。对于 Jackson 版本 2.10.1,有 NioPathDeserializer(自版本 2.8 起),当反序列化为 Path 对象时将被调用。