作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我很好奇 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/
我是一名优秀的程序员,十分优秀!