Итак, я создаю простой API в Spring Boot, который извлекает определенные c книги и их авторы образуют базу данных. Книга имеет идентификатор, имя, год публикации и внешний ключ для автора этой книги. Вот модель:
@Entity
@Table(name="book", schema = "book_store")
public class Book {
@Id
private long id;
private String name;
private int released;
@ManyToOne
@JoinColumn(name="author_id")
private Author author;
public Book() {
}
public Book(String name, int released, Author author){
this.name=name;
this.released=released;
this.author=author;
}
//And also the getters and setters
Вот репозиторий:
public interface BookRepository extends JpaRepository<Book, Long> {
}
И реализация службы:
@Service
public class BookServiceImplementation implements BookService {
@Autowired
private BookRepository bookRepository;
public List<Book> getAll(){
return bookRepository.findAll();
}
public List<Book> getWithoutAuthor(){
List<Book> newList=bookRepository.findAll();
newList.forEach(p ->p.setAuthor(null));
return newList;
}
}
Так что когда я go к /api/book/noAuthor
он вызывает метод getWithoutAuthor()
и возвращает ответ JSON:
[{"id":1,"name":"Anna Karenina","released":1877,"author":null},
{"id":2,"name":"War And Peace","released":1869,"author":null},
{"id":3,"name":"To Kill A Mockingbird","released":1960,"author":null},
{"id":4,"name":"Go Set A Watchman","released":2015,"author":null},
{"id":5,"name":"The Catcher In The Rye","released":1951,"author":null},
{"id":6,"name":"Franny And Zooey","released":1961,"author":null}]
Автору присваивается значение null, чего я и хочу, однако есть способ сделать ответ невозвратным "author":null
вообще?
Потому что в этом случае поле «автор» в значительной степени бесполезно, и я хочу полностью его удалить, потому что хочу получить более чистый ответ.
Я также пытался создайте пользовательский ответ JSON, создав список карт с ключами и значениями. Несмотря на то, что метод работает, он не возвращает список книг, который я хочу, чтобы контроллер возвращал в конце.
Кто-нибудь знает другой метод?