Я новичок в весенних / спящих технологиях, я пытался найти информацию об этом, но не смог, поэтому, если вы можете помочь, я буду так благодарен!
Мне нужно отобразить JSON Ответ в браузере нескольких таблиц, одна таблица имеет первичный ключ для другой.
Мои сущности:
@Entity
@Table
@ToString
public class Book {
@Id
@GeneratedValue(strategy = AUTO)
@JsonView(Views.IdName.class)
private Long book_id;
@JsonView(Views.IdName.class)
private String name;
@Column(length = 1000000)
private String text;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="author_id")
@JsonView(Views.IdName.class)
private Author author;
// ....get/set methods
Еще одна:
@Entity
@Table
@ToString
public class Page {
@Id
@GeneratedValue(strategy = AUTO)
private Long id;
@Column(length = 1000000)
private String text;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "book_id")
private Book book;
// ...get/set methods
Мои контроллеры :
@RestController
@RequestMapping("books")
public class BookController {
private final BookRepo bookRepo;
@Autowired
public BookController(BookRepo bookRepo) {
this.bookRepo = bookRepo;
}
@GetMapping
@JsonView(Views.IdName.class)
public List<Book> getAll() {
return bookRepo.findAll();
}
@GetMapping("{id}")
public Book getOne(@PathVariable("id") Book book) {
return book;
}
}
Еще один:
@RestController
@RequestMapping("authors")
public class AuthorController {
private final AuthorRepo authorRepo;
@Autowired
public AuthorController(AuthorRepo authorRepo) {
this.authorRepo = authorRepo;
}
@GetMapping
public List<Author> getAll() {
return authorRepo.findAll();
}
@GetMapping("{id}")
public Optional<Author> getOne(@PathVariable("id") Long id) {
return authorRepo.findById(id);
}
}
А также репо для взаимодействия с БД (они похожи):
public interface AuthorRepo extends JpaRepository<Author, Long> {
}
Итак, когда я делаю запрос на получение всех книг, я беру следующие JSON:
введите описание изображения здесь
Бит Я хочу другой результат, что-то вроде:
[
{
"book_id" : 1,
"name": "name 1 book",
"author" :
{
"author_id" : 1,
"name": "some_name"
}
}
]
Кроме того, когда я попытаюсь сделать запрос для /hors / 1, я получу следующий ответ (что-то вроде рекурсии):
введите описание изображения здесь
Так какая помощь, как я могу справиться с этим? Спасибо!