java - jackson 如何在没有二传手的情况下设置私有(private)属性(property)?

标签 java json jackson

我很好奇 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/

相关文章:

java - JDI - IllegalConnectorArgumentsException : Argument invalid

java - Java 中的字符串比较,我应该使用哪种算法?

json - 如何将 json 字符串转换为 scala 映射?

java - Jackson ObjectMapper 用方括号包裹每个元素(即使是单个值)

java - Jackson - 使用 Jackson 的反序列化器反序列化单个值

java - AIX 的 vbjclientorb.jar 中没有 com.inprise.vbroker.IIOP.Task

java - 包含多个 JAR 的 RMI

java - 如何在 Spring MVC Controller 的 Java Map 中获取带有子域的 JSON 字符串

java - 将json数组插入sqlite数据库时出现空指针异常

android - 使用 Retrofit 库获取时出错