In einem ersten Schritt erstellen wir die Klasse ch.std.book.service.BookService und lagern die Business Methoden der Klasse BookController in die Service Klasse aus:
Implementieren Sie die ch.std.book.service.BookService Klasse gemäss dem UML Diagramm.
Testen Sie die korrekte Funktionalität anhand der schon bestehenden Unit Tests.
In der Praxis sollten eigene Unit Test bezogen auf den BookService programmiert werden.
In diesem Kurs verzichten wir aber aus zeitlichen Gründen auf solche Tests.
Wir verzichten auf die bidirektionale Verknüpfung bei der DTO Ebene.
Programmieren Sie den BookController so um, dass er hinsichtlich Request und Response mit den DTO Objekten arbeitet. Nutzen sie für das Mapping z.B. den ModelMapper analog dem JumpStart:
package ch.std.book.rest;
...
@RestController
@RequestMapping("/rest")
public class BookController {
Logger logger = LoggerFactory.getLogger(BookController.class);
private BookService bookService;
private ModelMapper modelMapper;
public BookController(BookService bookService, ModelMapper modelMapper) {
this.bookService = bookService;
this.modelMapper = modelMapper;
}
@GetMapping("/books")
public BookDTO[] getBooks(@RequestParam(value = "value", required = false) String value) {
logger.info("getBooks, value = " + value);
List<Book> books = this.bookService.getBooks(value);
BookDTO[] bookArray = books.stream().map(book -> this.modelMapper.map(book, BookDTO.class))
.toArray(BookDTO[]::new);
return bookArray;
}
...
}
Die Jackson ModelMapper Klassen sind als Maven Depedency zu im pom.xml zu definieren:
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.5</version>
</dependency>
Integrieren Sie das ModelMapper Bean über die Klasse ch.std.book.config.ApplicationConfig (siehe JumpStart).
Verifizieren Sie, dass die Applikation auch korrekt mit den DTO Objekten arbeitet:
Wenn die Autoren nicht gemappt werden fehlt in der Klasse BookDTO eventuell die Setter Methode:
public void setAuthorList(List<AuthorDTO> authorList) {
this.authorList = authorList;
}
Testen Sie via mvn clean install auf der Konsole.
Passen Sie die Book Controller Unit Tests an, so dass alle Tests korrekt funktionieren mit den DTO Klassen.