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
对象时将被调用。
我不是在抱怨,而是想了解它为什么有效。
这是我的 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
对象时将被调用。