Как Джексон автоматически десериализует java .nio.file.Path? - PullRequest
2 голосов
/ 11 января 2020

Я не жалуюсь, но хотел бы понять, почему это работает.

Это мой Java класс:

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 нет конструктора (publi c), который принимает String. Откуда Джексон знает, что ему нужно позвонить Path.of()?

1 Ответ

4 голосов
/ 11 января 2020

Jackson's ObjectMapper поставляется с предопределенными стандартными сериализаторами / десериализаторами из коробки. Для версии Джексона 2.10.1 существует NioPathDeserializer (начиная с версии 2.8), которая будет вызываться при десериализации объектов Path.

...