gpt4 book ai didi

json - 使用 Jackson 将 JPA 实体序列化为 JSON

转载 作者:行者123 更新时间:2023-12-04 22:05:49 25 4
gpt4 key购买 nike

关于 jackson /JPA组合的问题

  • 如果当前应用程序中有大约 20 个实体,并且我在 POM 中添加了 Jackson 依赖项,这是否意味着默认情况下所有实体都准备好转换为 JSON目的?我看到一个示例项目似乎只有注释为 @JsonIgnored 的类被 JSON 跳过.如果是这样,那么这怎么会发生,这种机制的背后是什么?怎么样JACKSON处理那些没有任何 Jackson 注释的实体,默认情况下是否忽略?我一直在网上寻找资源,但运气不佳。
  • 如果 20 个实体中只有一个需要映射到 JSON 对象,是否意味着我必须将 @JsonIgnore 添加到所有其他 19 个实体?如果不是,怎么办Jackson与要工作的实体区分开来?

  • 谢谢。

    最佳答案

    Jackson 和 JPA 彼此没有任何关系。 Jackson 是一个 JSON 解析库,JPA 是一个持久化框架。 Jackson 可以连载 几乎所有 对象 - 唯一的要求是对象具有某种可识别的属性( Javabean type properties ,或用 @JsonProperty 注释的裸字段。反序列化还有一个额外的要求,即目标类型具有默认(无参数)构造函数所以,例如,这是一个 Jackson 可以序列化的对象:

    // Class with a single Javabean property, "name"
    class Person {
    private String name;

    public String getName() { return name ; }
    public String setName(String name) { this.name = name ; }
    }

    这是另一个:
    // Class with a single field annotated with @JsonProperty
    class Account {
    @JsonProperty("accountNumber")
    private String accountNumber;
    }

    这是另一个:
    @Entity
    public class User {
    @Id
    private Long id;

    @Basic
    private String userName;

    @Basic
    @JsonIgnore
    private String password;

    @Basic
    @JsonIgnore
    private Address address;

    // Constructors, getters, setters
    }

    最后一个示例显示了一个 JPA 实体类 - 就 Jackson 而言,它可以像任何其他类型一样被序列化。 但是 ,注意它的字段:当这个对象被序列化为 JSON 时,两个字段将不会被包含 - 'password' 和 'address'。这是因为它们已被注释为 @JsonIgnore . @JsonIgnore注释允许开发人员说“嘿,可以序列化这个对象,但是当你这样做时,不要在输出中包含这些字段”。此排除仅针对此对象的字段发生,例如,如果您包含 Address另一个类中的字段,但没有将该字段标记为可忽略,它将被序列化。

    防止类型序列化 在所有情况下 ,无论上下文如何,使用 @JsonIgnoreType 注解。当在类型上使用时,它基本上意味着“我不在乎在哪里使用这种类型,从不序列化它”。

    关于json - 使用 Jackson 将 JPA 实体序列化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15975363/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com