gpt4 book ai didi

java - 使用 jackson 将双向 JPA 实体序列化为 JSON

转载 作者:太空狗 更新时间:2023-10-29 22:49:29 26 4
gpt4 key购买 nike

我正在使用 Jackson 将我的 JPA 模型序列化为 JSON。

我有以下类(class):

import com.fasterxml.jackson.annotation.*;
import javax.persistence.*;
import java.util.Set;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class)
@Entity
public class Parent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;

@JsonManagedReference
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Child> children;

//Getters and setters
}

import com.fasterxml.jackson.annotation.*;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class)
@Entity
public class Child {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;

@JsonBackReference
@ManyToOne
@JoinColumn(name = "parentId")
private Parent parent;

//Getters and setters
}

我正在使用 POJO 映射将模型序列化为 JSON。当我序列化父对象时,我得到以下 JSON:

{
"id": 1,
"name": "John Doe",
"children": [
{
"id": 1,
"name": "child1"
},{
"id": 2,
"name": "child2"
}
]
}

但是当我序列化一个 Child 时,我得到以下 JSON:

{
"id": 1,
"name": "child1"
}

缺少对父项的引用。有办法解决吗?

最佳答案

我认为您必须在 @JsonIdentityInfo@JsonBackReference/@JsonManagedReference 之间做出选择。

我会去: @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property="id") 在你的实体上,删除 @JsonBackReference/ @JsonManagedReference 对。

然后在要排除的字段上添加@JsonIgnore

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

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