我很好奇 Jackson 如何在没有 setter 的情况下创建对象,包括它的私有(private)属性/字段,并且只使用对象的空构造函数。
我问的原因是,当我反序列化某些属性时,我想根据这些值自动设置其他属性。例如,我不想序列化图像,而只是序列化它的路径。一旦路径被反序列化,@JsonIgnore
字段 Image 就可以加载实际图像。在构造反序列化对象之后,尚未分配字段。 setter/getter 在逻辑上不会被调用。那么是什么巫毒魔法在触摸我的物体私处?
public class ItemTemplate {
private String imagePath;
public ItemTemplate() {
System.out.println(imagePath); //Still null
}
public String getImagePath() {
System.out.println(imagePath); //Not being called when deserializing.
return imagePath;
}
}
但是当 Jackson 完成反序列化这个对象时,它已经设置了 imagePath
。
最佳答案
第一条评论回答了标题中的问题。 jackson 使用 reflection to access private and protected properties .这不知何故让我尝试了 imagePath
字段的私有(private) setter 。这个二传手确实被 jackson 使用,而不是直接访问该领域。在这个 setter 中,我可以使用路径字符串设置实际图像并仍然保持私有(private)。
关于java - jackson 如何在没有二传手的情况下设置私有(private)属性(property)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43821319/