java - Jersey Jackson JSON 和 Eclipselink JPA - 如何在没有 @JsonIgnore 的情况下动态忽略拥有实体的 JSON 属性?

标签 java json jpa jackson eclipselink

所以我有一个数据库和一个充满 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/

相关文章:

java - 在 Hashmap 中将 JsonAnySetter 和 JsonAnyGetter 与 ArrayList 一起使用

javascript - 我正在获取图像的 ListView ,而不是以网格格式显示

java - @Embeddable 类可以是私有(private)的吗?

java - JPA继承问题

javascript - 使用 React 将提交的表单值保存在 JSON 文件中

jakarta-ee - JBAS014544 : No EJB found with interface

Java 桌面应用程序框架与 JavaFX

java - 在Java中的测试类中调用创建的类

java - 在 Grails 的脚手架 View 中控制页面上的项目数

java - 如何通过远程方法发送json-rpc http post请求并在java中传递加密参数