所以我有一个数据库和一个充满 JPA 实体的库,我通常在 Jersey Rest Service 上读取它们。当我尝试读取实体时,它会递归读取双向关系。我知道 @JsonIgnore 修复了这个问题,但是数据库太大,无法手动遍历每个实体并将 @JsonIgnore 添加到所有者实体的每个字段。
客户:
@Entity
public class Customer implements DomainObject{
private static final long serialVersionUID = 2543387766776209353L;
@Id
private long id;
private String firstName;
private String lastName;
@OneToOne(fetch = FetchType.LAZY, mappedBy="customer",cascade={CascadeType.ALL})
private Address address;
...Getters and Setters...
}
地址:
@Entity
public class Address implements DomainObject {
private static final long serialVersionUID = 2543387766776209353L;
@Id
private long id;
private String city;
private String street;
@PrimaryKeyJoinColumn
@OneToOne(fetch = FetchType.LAZY)
private Customer customer;
...Getters and Setters...
}
基本上,如果可能的话,我想忽略在没有 @JsonIgnore 的情况下在地址的 Json 中发送客户。如果没有,是否可以使用另一种 JSON 构建技术来生成遵循所有者和mappedBy 字段的 JPA 表示法的 JSON?
最佳答案
也许您可以考虑为 REST 服务响应创建不同的对象,如 Data Transfer Object 中所述。模式。
这需要您编写更多代码,但可以让您更好地控制服务的响应,甚至允许您在需要时添加聚合,以避免从客户端到玩具服务的不必要的往返,如维基百科文章中所述。
This answer详细阐述了 DTO。
关于java - Jersey Jackson JSON 和 Eclipselink JPA - 如何在没有 @JsonIgnore 的情况下动态忽略拥有实体的 JSON 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23505722/