带有 Jackson 和 Spring Boot 的实体 JPA 中的循环引用

Posted

技术标签:

【中文标题】带有 Jackson 和 Spring Boot 的实体 JPA 中的循环引用【英文标题】:Circular reference in entity JPA with Jackson and Spring Boot 【发布时间】:2018-09-16 11:31:03 【问题描述】:

我有两个网络服务:“Proprietario”和“Veiculo”,“Proprietario”包含“Veiculo”列表,“Veiculo”包含“Proprietario”。

问题是,当我发出调用“Proprietario”的 findAll 方法的请求时,在尝试序列化时,Jackson 进入无限循环抛出异常。当我尝试调用“Veiculo”的 findAll 方法时也会发生同样的情况。

当我打电话给你调用“Veiculo”的findAll时,我希望它带有“Proprietario”,但不要将“Veiculo”列表带到“Proprietario”内。与调用“Proprietario”的findAll方法相反,我想将“Veiculo”列表带入,但不要将“Proprietario”带入“Veiculo”。

我尝试使用一些 Jackson 注释,但没有一个可以解决双方的冲突。

@Getter
@Setter
@Entity
@EqualsAndHashCode(of = "id")
public class Veiculo 

    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Long id;

    @Column(length = 10)
    private String placa;

    @Column(nullable = false)
    private Integer ano;

    @ManyToOne
    @JoinColumn
    private Proprietario proprietario;



@Getter
@Setter
@Entity
@EqualsAndHashCode(of = "id")
public class Veiculo 

    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Long id;

    @Column(length = 10)
    private String placa;

    @Column(nullable = false)
    private Integer ano;

    @ManyToOne
    @JoinColumn
    private Proprietario proprietario;

【问题讨论】:

【参考方案1】:

尝试使用这两个注解 @JsonManagedReference and @JsonBackReference

见http://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion

【讨论】:

以上是关于带有 Jackson 和 Spring Boot 的实体 JPA 中的循环引用的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Jackson 和数据序列化

在 Jackson / Spring Boot 中测试自定义 Json Deserializer

Spring Boot Jackson - 日志记录

Spring Boot的Jackson JSON映射器[关闭]

Spring Boot,AWS应用程序上的Jackson数据绑定依赖错误

Spring Data Mongo + 延迟加载 + REST Jackson