Я пытаюсь создать REST API с загрузочным приложением Spring для веб-приложений и мобильных приложений.В моем приложении у меня есть несколько внешних ключей, и я хочу передать только идентификатор объекта вместо всего объекта.См. Пример ниже.
Модель книги
// imports
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String title;
private String isbn;
@ManyToOne
@JoinColumn(name = "category_id", updatable = false)
private BookCategory bookCategory;
public Book() {
}
public Book(Integer id, String title, String isbn, BookCategory bookCategory) {
this.id = id;
this.title = title;
this.isbn = isbn;
this.bookCategory = bookCategory;
}
// getters and setters
}
Категория модели
// imports
@Entity
public class BookCategory {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
@OneToMany(mappedBy = "bookCategory", cascade = CascadeType.ALL)
private List<Book> books;
public BookCategory() {
}
public BookCategory(Integer id, String name) {
this.id = id;
this.name = name;
}
// getters and setters
}
Book Controller
// imports
@RestController
@RequestMapping(path = "/api/v1")
public class BookController {
@Autowired
private BookRepository bookRepository;
// other methods for index, show, put and delete
@PostMapping(path = "/books")
public book createBook(@RequestBody Book book) {
return bookRepository.save(book);
}
}
Хранилище книг
// imports
public interface BookRepository extends PagingAndSortingRepository<Book, Integer> {
}
Категории книг предварительно загружены в базу данных, и я не хочу позволять клиенту изменять ихили добавить новые.
Вот JOST POST, который я пробовал, и объект, который был сохранен в базе данных.
Запрос
{
"title": "Tirant lo blanc",
"isbn": "9788475841199",
"category_id": 4
}
Ответ
{
"title": "Tirant lo blanc",
"isbn": "9788475841199",
"bookCategory": null
}
Я тоже пытался отправить его как объект, но результат нулевой.
{
"title": "Tirant lo blanc",
"isbn": "9788475841199",
"category_id": {
"id": 4
}
}
Как я могу отправить идентификатор категории, чтобы правильно сохранить книгу в базе данных?Лучше вместо этого отправить весь объект категории?Я тоже пытался, но ответ и сохраненная книга в базе данных всегда находятся в категории null.