Java @JSON中不存在OneToMany列 我拥有以下实体:
Book.javaJava @JSON中不存在OneToMany列 我拥有以下实体:,java,json,spring,jpa,entity-relationship,Java,Json,Spring,Jpa,Entity Relationship,Book.java @Entity @Data public class Book { @Id private Long id; @Column(unique = true, nullable = false) private String title; @OneToMany(fetch = FetchType.LAZY, mappedBy = "book") @JsonManagedReference priva
@Entity @Data
public class Book {
@Id
private Long id;
@Column(unique = true, nullable = false)
private String title;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "book")
@JsonManagedReference
private List<Note> notes;
}
当我调用我的BookRestController时,它返回一个JSON,其中包含我需要的所有属性:
{
"id": 15,
"title": "A fé explicada",
"author": "Leo J. Trese",
"notes": [{
"id": 10,
"title": "Sobre o pecado mortal"
}]
}
但是当我调用NoteRestController时,Book属性丢失:
{
"id": 10,
"title": "Sobre o pecado mortal"
// missing "book" property here...
}
我做错了什么
我使用@OneToMany和@ManyToOne注释来声明这是一种1-N关系@JsonBackReference和@JsonManagedReference的目的很简单,就是为了避免无限递归。当然
书
被省略了,这就是@JsonBackReference
的字面意义
@JsonBackReference是引用的后面部分–它将从序列化中省略
()
解决方案听起来很简单:您可以创建一个显式的传输对象,名为e,而不是在REST控制器中返回一个Note
实体(无论如何,我尽量避免将实体保留为在REST上下文中没有任何用途的实体)。gNoteDTO
包含一本书的引用(省略该书的注释以避免无限递归):
{
"id": 10,
"title": "Sobre o pecado mortal"
// missing "book" property here...
}
public class NoteDTO {
private Long id;
private String title;
private BookReferenceDTO book;
// getters and setters
}
public class BookReferenceDTO {
private Long id;
private String title;
// getters and setters
}