В моем приложении Spring Boot у меня есть класс с именем User
:
@Data
@Entity
public class User {
@Id
Long userID;
...
@ManyToMany(mappedBy = "admins")
private List<ClassRoom> classRooms = new ArrayList<>();
}
И у меня есть другой класс с именем ClassRoom
:
@Data
@Entity
public class ClassRoom {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long classRoomID;
...
@ManyToMany
@JoinTable(name ="classroom_admins",
joinColumns = @JoinColumn(name = "classroom_id"),
inverseJoinColumns = @JoinColumn(name = "user_id"))
private List<User> admins = new ArrayList<>();
}
В моем ClassRoomController
у меня есть такой метод:
@PostMapping("/class")
ClassRoom newClassRoom(@RequestBody User user) {
ClassRoom classRoom=new ClassRoom();
classRoom.getAdmins().add(user);
user.getClassRooms().add(classRoom);
logger.debug(classRoom);
logger.debug(user);
return repository.save(classRoom);
}
Теперь я отправил curl -X POST -H "Content-Type: application/json" -d "{ \"userID\":\"22\" }" http://localhost:8080/class
Этот запрос, и он дает мне ошибку, говоря: java.lang.StackOverflowError
Я должен использовать ToString.Exclude
|JsonBackReference
|@JsonManagedReference
или что-то в этом роде, не уверен, что правильно, лучше всего, что я должен использовать?
В моем UserController
:
@PostMapping("user/{id}/c")
User addClassRoom(@PathVariable Long id,@RequestBody ClassRoom newClassRoom)
{
logger.debug(repository.findById(id));
return repository.findById(id)
.map(user -> {
user.getClassRooms().add(newClassRoom);
newClassRoom.getAdmins().add(user);
return repository.save(user);
})
.orElseGet(() -> {
return null;
});
}
И я выложил это curl -X POST -H "Content-Type: application/json" -d "{ }" http://localhost:8080/user/2/c
Это создало запись в ClassRoom, но User
имеет []
ClassRoom
, а ClassRoom
имеет []
admins
и таблицу CLASSROOM_USER
тоже пусто.
Как мне решить эту проблему?
Полная консоль здесь .