menu
{$Head.Title}}

Übung Book Service Teil 4

Übung Book Service Teil 4

Book Service

Bisher haben wir keine DTO Objekte und Service Components für den Book Controller eingesetzt. Dies holen wir nun mit dieser Übung nach.

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.

DTO

Programmieren Sie die DTO Klassen BookDTO und AuthorDTO gemäss dem folgenden UML Diagramm:

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.

Lösung

Eine mögliche Lösung finden Sie als Maven Projekt bookservice4.zip