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

Mor*_*sen 4 java json jackson java.nio.file

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

这是我的 Java 类:

public static class ExampleClass {
  private Path target;

  public Path getTarget() {
    return target;
  }

  public void setTarget(Path target) {
    this.target = target;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是 JSON:

{
  "target": "some/path"
}
Run Code Online (Sandbox Code Playgroud)

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

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

但是如何?中没有(公共)构造函数Path,它接受String. Jackson 怎么知道它需要调用Path.of()

mic*_*alk 5

Jackson'sObjectMapper带有预定义的标准序列化器/解串器开箱即用。对于 Jackson 版本2.10.1,当反序列化到对象时将调用NioPathDeserializer(自 version 2.8Path