如何避免父子jpa关系中的json响应递归?
Posted
技术标签:
【中文标题】如何避免父子jpa关系中的json响应递归?【英文标题】:How to avoid json response recursiveness in parent-child jpa relationship? 【发布时间】:2021-12-02 02:34:58 【问题描述】:我有这个问题,我以前没有遇到过,所以我寻求帮助。 我有这个实体类
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder(toBuilder = true)
@Entity
@Table(name = "persons")
class Person
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Type(type = "uuid-char")
private UUID id;
@Column
private String name;
@Column
private int age;
@EqualsAndHashCode.Exclude
@ToString.Exclude
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "person_contact", joinColumns = @JoinColumn(name = "person_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "contact_id", referencedColumnName = "id"))
private Set<Person> contacts;
我遇到的主要问题是,当我将此实体映射到具有与上面显示的相同属性的某个 DTO 时,当我从控制器端检索它作为响应时,我得到递归,因为有些东西不正确“接触”关系。我怎样才能摆脱这个问题?我只想一次又一次地从集合中检索 ID、年龄和姓名,而不是集合本身。我怎么能忽略它?
【问题讨论】:
@JsonIdentityInfo
.
【参考方案1】:
我看到了两种“解决”这个问题的方法:
-
只需从 DTO 中删除
Set<Person>
属性即可。
如果您使用此属性并且只想在序列化为 JSON 时忽略它,请在字段中添加 @JsonIgnore
注释,它不会在响应中序列化。
--编辑
根据评论,您想添加此字段,并让它显示Person
集合的数据,但那些不应该显示他们的“联系人”。
您可以创建仅具有前 3 个字段的第二个 DTO 类,而不是将 Set<Person>
添加到主 DTO,而是添加 Set<PersonContactDto>
或类似名称。
【讨论】:
但我希望联系人进入我的回复但没有联系人集合。以上是关于如何避免父子jpa关系中的json响应递归?的主要内容,如果未能解决你的问题,请参考以下文章