java - 如何使用@JsonIgnore仅在对象不是根对象时应用?

标签 java spring rest jackson

我正在使用 Spring 框架开发一个基于 REST 的 JAVA 项目。我的一些 JPA 实体具有来自 jackson 的 @JsonIgnore 属性注释。下面的例子。

@Entity
@Table(name="TRANSACTION")
public class Transaction {

    @Id
    @Column(name="SERIAL", length=16)
    private String serial;

    @Column(name="NARRATION", length=128)
    private String narration;

    @OneToMany(mappedBy="transaction", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
    private List<TransactionDetail> details;

  // other fields goes here

}

@Entity
@Table(name="TRANSACTION_DETAIL")
public class TransactionDetail {

    @Id
    @Column(name="UUID", updatable=false)
    private String uuid;

    @JsonIgnore
    @ManyToOne
    @JoinColumn(name="FK_TRANSACTION")
    private Transaction transaction;

    @Column(name="ACCOUNT_NO")
    private int accountNo;

  // other fields goes here

}

根据上述类关系,我希望仅在获取 Transactions 时应用 @JsonIgnore

List<Transactions> transactions = transactionsRepo.findAll()

但是如果我直接获取 TransactionDetails,我还需要获取 TransactionDetail 中的属性 transaction

List<TransactionDetail> details = transactionDetailsRepo.findByAccountNo(accountNo);

如何使用@JsonIgnore来执行此操作?或者还有其他正确的方法来实现这一目标吗?

最佳答案

@Entity
@JsonInclude(JsonInclude.Include.NON_NULL)
@Table(name="TRANSACTION_DETAIL")
public class TransactionDetail {

    @Id
    @Column(name="UUID", updatable=false)
    private String uuid;


    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="FK_TRANSACTION")
    private Transaction transaction;

    @Column(name="ACCOUNT_NO")
    private int accountNo;

  // other fields goes here

}

您可以尝试使用 fetchtype 作为lazy,它的作用是获取事务详细信息实体中的属性。但它不会获取 transaction_detail 的相关数据,这意味着所有其他数据将为空。您可以使用 @JsonInclude 注释您的实体,就像我所做的那样,仅包含非空值。 并请添加 jackson-datatype-hibernate Jar 文件,或者如果您使用 maven,请在 pom 文件中添加依赖项

关于java - 如何使用@JsonIgnore仅在对象不是根对象时应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46556249/

相关文章:

java - 捕获多个异常并执行相同的操作

Java SE服务器+数据库+REST框架

arrays - POST对象数组到REST API

mysql - 如何使网站和 API 中使用的 SQL 查询保持通用

Javafx 组合框重置问题

java - sudo 登录后使用 Java JSch 程序执行多个 bash 命令

java - 在运行时将动态值传递给 kafka 消费者主题以实现消息驱动的 channel 适配器

java - 为什么此代码无法使用 Rest API 发布任何内容?

java - 在java中使用正则表达式格式化字符串,如何将捕获的组转换为特殊字符?

java - Netty - 在处理程序之外维护 channel 映射的正确方法