我的Spring应用程序有一个问题-我正在练习ManyToMany Relationship。我做了两个实体-学生,和他们的团体-一切都很好,但当我试图显示他们在 Postman 我有意大利面条的结果如下:
{"id ":4," lastName ":" guzik "," groups ":[{" id":1,"groupName":"grupka","students":…….(较短的版本,大约1000行)[{"id ":1,"姓氏":"smith","groups":[2019 - 03 - 22][2019 - 03 - 22][2019 - 03 - 22][2019 - 03 - 22][2019 - 03 - 22][2019 - 03 - 22][2019 - 03 - 22][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03]2019 - 03 - 03][2019 - 03][[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 03 - 29][2019 - 03 - 29][2019 - 03 - 29][2019 - 03 - 29][2019 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 01][2019 - 03 - 01][2019 - 03 - 01][2019 - 01][2019 - 01][2019 - 01][2019 - 01][2019 - 01][2019 - 01]2019 - 01][2019 - 01][“2022 - 04 - 25T08:二十五:31.387 + 00:00","状态":200," error":"确定","路径":"/api/student/4 "}
我做错了什么?
@RestController
@RequestMapping("/api")
public class MainController{
@Autowired
GroupRepo groupRepo;
@Autowired
StudentRepo studentRepo;
@GetMapping("/student/{id}")
ResponseEntity<?> getStudent(@PathVariable long id){
Optional<Students> student=studentRepo.findById(id);
return ResponseEntity.ok().body(student);
}
@GetMapping("/group/{id}")
ResponseEntity<?> getGroup(@PathVariable long id){
Optional<Groupssss> group=groupRepo.findById(id);
return ResponseEntity.ok().body(group);
}
@GetMapping("/student/{id}/groups")
ResponseEntity<?> studentGroups(@PathVariable long id){
Students student=studentRepo.findById(id).orElseThrow(()-> new UsernameNotFoundException("student not found"));
return ResponseEntity.ok().body(student.getGroups());
}
@PostMapping("/add")
@Transactional
ResponseEntity<?> addStudentToGroup(@RequestHeader long id) throws Exception{
Students student=studentRepo.findById(id)
.orElseThrow(()-> new UsernameNotFoundException("student not found"));
Groupssss group=groupRepo.findByGroupName("grupka").orElseThrow(Exception::new);
student.addGroup(group);
studentRepo.save(student);
return ResponseEntity.ok().build();
}
@Entity
public class Groupssss {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String groupName;
@ManyToMany(fetch = FetchType.LAZY,
cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
},
mappedBy = "groups")
private Set<Students> students=new HashSet<>();
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public void setStudents(Set<Students> students) {
this.students = students;
}
public Set<Students> getStudents() {
return students;
}
public String getGroupName() {
return groupName;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
@Entity
@Table(name="students")
public class Students {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
long id;
String firstName;
String lastName;
@ManyToMany(fetch = FetchType.LAZY,
cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
})
@JoinTable(name="student_group",
joinColumns = @JoinColumn(name="student_id"),
inverseJoinColumns = @JoinColumn(name="group_id"))
Set<Groupssss> groups=new HashSet<>();
public Students(){}
public Students(String firstName, String lastName){
this.firstName=firstName;
this.lastName=lastName;
}
public void addGroup(Groupssss group){
this.groups.add(group);
group.getStudents().add(this);
}
public Set<Groupssss> getGroups() {
return groups;
}
public String getLastName() {
return lastName;
}
public String getName() {
return firstName;
}
public void setGroups(Set<Groupssss> groups) {
this.groups = groups;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public void setName(String firstName) {
this.firstName = firstName;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
1条答案
按热度按时间wlwcrazw1#
如果你使用ManyToMany关系,当你试图获取它的List时,它会递归地调用Parent和Child实体。在子实体中必须存在无知,如:
在Parent实体中,您可以调用@JsonManagedReference
在子实体中,您可以调用@JsonBackReference
文档在这里:双向关系
或者,您可以在Child实体中的Parent声明顶部使用@JsonIgnore。当你使用JsonIgnore时,情况会变得更糟。
文档在这里:Jackson忽略属性
或者在需要忽略许多字段时使用@JsonIgnoreProperties
享受