我非常好奇Jackson如何创建对象,包括它的私有属性/字段,没有setter,只使用对象空构造函数.
我问的原因是当我反序列化某些属性时,我想根据这些值自动设置其他属性.例如,我不想序列化图像,只是它的路径.一旦路径被反序列化,@JsonIgnore字段Image就可以加载实际图像.在反序列化对象的构造之后,尚未分配字段.从逻辑上讲,吸气剂没有被调用.那么伏都教魔法是什么触摸我的物体私处?
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;
}
}
Run Code Online (Sandbox Code Playgroud)
但是当杰克逊完成对这个对象的反序列化时,它已经imagePath设置好了.
第一条评论回答了标题中的问题.杰克逊使用反射访问私人和受保护的财产.这在某种程度上促使我尝试了一个私人的imagePath场地设定者.这个二传手确实被杰克逊使用,而不是直接访问该领域.在这个setter中,我可以使用路径字符串设置实际图像,但仍保持私有.
| 归档时间: |
|
| 查看次数: |
7471 次 |
| 最近记录: |