Państwowa Wyższa Szkoła Zawodowa w Tarnowie Zakład Informatyki Laboratorium 5 Spring Web MVC, Spring DI Prowadzący: Kierunek: Semestr: Rok: Informatyka Zimowy 2
Technologie Technologie / narzędzia będące przedmiotem laboratorium: PdfGenerator - praca z kodem Proszę pobrać aplikację PdfGenerator na dysk własnego komputera albo sklonować repozytorium Git (jeśli posiadają Państwo pliki źródłowe na platformie Bitbucket). Przed przystąpieniem do jakichkolwiek ćwiczeń proszę o skonfigurowanie projektu PdfGenerator aby uruchamiał się przy pomocy spring-boot a (konfiguracja została opisana w konspekcie laboratorium 4) oraz uruchomienie aplikacji Postman. IntelliJ IDEA - klonowanie projektu Proszę zalogować się na platformie Bitbucket. Należy przejść do menu Source. Następnie klikamy w button Clone. Proszę skopiować adres własnego repozytorium. 1
Następnie proszę przejść do ekranu powitalnego IntelliJ IDEA. Z menu należy wybrać Check out from Version Control Git. Wklejamy skopiowany adres repozytorium (należy pamiętać aby usunąć z skopiowanego adresu komendę git clone). Klikamy Clone. 2
Klikamy Yes. Projekt jest sklonowany i gotowy do działania. 3
Tworzymy kontroler Proszę utworzyć klasę DocumentApiContriller w pakiecie com/demo/springboot/rest/. Następnie dołączymy LOGGER oraz przykładową metodę testdocument(), tak jak zostało to zobrazowane na poniższym screenie. Parametry adnotacji @RequestMapping: value - dostosowywujemy URL żądanie do własnych potrzeb, method - dostosowywujemy metodę żądania np.: GET, POST, PUT, DELETE itd. W jaki sposób budowane jest żądanie HTTP? Po uruchomieniu aplikacji przy pomocy spring-boot uruchamiany jest serwer, który uruchamia się na lokalhoście (127.0.0.1) na porcie 8080. Początek żądania wygląda następująco: http://127.0.0.1:8080 Następnie sprawdzamy parametr value adnotacji @RequestMapping nad klasą kontrolera a jego wartość dopisujemy do żądania: http://127.0.0.1:8080/api Następnie sprawdzamy parametr value adnotacji @RequestMapping nad metodą testdocument(), a jego wartość dopisujemy do żądania: http://127.0.0.1:8080/api/document/test Teraz już wiemy, że na powyższe żądanie będzie reagowała metoda testdocument(). Możemy to sprawdzić uruchamiając aplikację i testując żądanie Postmanem. 4
W aplikacji Postman powinniśmy otrzymać kod odpowiedzi serwera 200 OK (lista wszystkich odpowiedzi HTTP dostępna jest tutaj). Poniżej został przedstawiony wynik działania usługi (logi serwera). Jak odczytać dane z ścieżki żądania? Adnotacja @PathVariable: Proszę dokonać modyfikacji kodu metody testdocument(), tak jak zostało to przedstawiona na poniższym screenie. Metoda testdocument(string name) po zmianach otrzymała zmienną name. Po modyfikacji ścieżki żądania HTTP oraz wprowadzeniu adnotacji @PathVariable jesteśmy w stanie przechwycić taką zmienną bezpośrednio z linka (taka zmienna może być mapowana na inne typy np.: int, double, long itd. w zależności od potrzeb programisty). Proszę przetestować metodę w praktyce. 5
W aplikacji Postman powinniśmy otrzymać kod odpowiedzi serwera 200 OK (lista wszystkich odpowiedzi HTTP dostępna jest tutaj). Poniżej został przedstawiony wynik działania usługi (logi serwera). Jak odczytać dane z parametrów żądania? Adnotacja @RequestParam: Proszę dokonać modyfikacji kodu metody testdocument(), tak jak zostało to przedstawiona na poniższym screenie. Metoda testdocument(string firstname, Integer age) po zmianach otrzymała zmienne first- Name oraz age. Po modyfikacji ścieżki żądania HTTP oraz wprowadzeniu adnotacji @RequestParam jesteśmy w stanie przechwycić takie zmienne (takie zmienne mogą być mapowana na inne typy np.: int, double, long itd. w zależności od potrzeb programisty). Proszę przetestować metodę w praktyce. 6
W aplikacji Postman powinniśmy otrzymać kod odpowiedzi serwera 200 OK (lista wszystkich odpowiedzi HTTP dostępna jest tutaj). Poniżej został przedstawiony wynik działania usługi (logi serwera). Jak odczytać JSONa? Proszę utworzyć klasę DocumentDto (DTO - data transfer object) w pakiecie com/demo- /springboot/domain/dto, tak jak zostało to zobrazowane na poniższym screenie. 7
Następnie proszę zmodyfikować metodę testdocument() aby mogła przyjmować JSONa. Sytuacja została przedstawiona na poniższym screenie. Metoda testdocument(documentdto documentdto) po zmianach otrzymała zmienną documentdto. Po modyfikacji ścieżki żądania HTTP oraz wprowadzeniu adnotacji @Request- Body jesteśmy w stanie przechwycić JSONa (jeśli wywołamy taką usługę i wyślemy JSONa z identycznymi nazwami pól jak pola klasy DocumentDto wówczas będziemy w stanie odczytać wartości wszystkich zmiennych przekazanych z zewnątrz do serwera). Proszę przetestować metodę w praktyce. W aplikacji Postman powinniśmy otrzymać kod odpowiedzi serwera 201 Created (lista wszystkich odpowiedzi HTTP dostępna jest tutaj). Poniżej został przedstawiony wynik działania usługi (logi serwera). 8
W jaki sposób usługa zwraca JSONa? Proszę zmodyfikować metodę testdocument(), aby mogła zwracać JSONa. Sytuacja została przedstawiona na poniższym screenie (zakładam, że została już utworzona klasa DocumentDto - jeśli nie to proszę utworzyć klasę DocumentDto, tak jak zostało to opisane w poprzednim podrozdziale). Metoda testdocument() po zmianach jest w stanie zwrócić JSONa (ResponseEntity przyjmuje instancję klasy DocumentDto oraz kod błędu OK, dzięki temu będziemy w stanie zwrócić JSONa po wywołaniu usługi). Proszę przetestować metodę w praktyce. 9
W aplikacji Postman powinniśmy otrzymać kod odpowiedzi serwera 200 OK (lista wszystkich odpowiedzi HTTP dostępna jest tutaj). Poniżej został przedstawiony wynik działania usługi (logi serwera). Spring - wstrzykiwanie zależności (DI) @Autowired - łączenie komponentów. W przypadku obiektów zarządzanych przez Springa możemy zastosować tzw. wstrzykiwanie zależności (DI). Co to znaczy, że obiekt jest zarządzany przez Springa? Aby obiekt był zarządzany przez Springa należy zastosowac adnotację przed klasą np.: @Controller, @Service, @Repository, @Component. Wstrzykiwanie zależności działa na klasach, które zawierają powyższe adnotacje. Jak wstrzykiwanie działa w praktyce? Proszę utworzyć interfejs DocumentService w pakiecie com/demo/springboot/service/, tak jak zostało to zobrazowane na poniższym screenie. Następnie proszę utworzyć klasę DocumentServiceImpl (klasa, która implementuje interfejs DocumentService) w pakiecie com/demo/springboot/service/impl. Klasa będzie posiadała adnotację @Service, dzięki tej adnotacji powiemy Springowi, że ta klasa będzie przez niego zarządzana i będzie mogła podlegać wstrzykiwaniu. Więcej informacji przedstawia poniższy screen. Komponent jest gotowy do działania. Teraz tylko wystarczy odwołać się do interfejsu w polu klasy DocumentApiController oraz opatrzyć takie pole adnotacją @Autowired. W tym momencie 10
dokonaliśmy łączenia komponentów Springa. Cała sytuacja została przedstawiona na poniższym screenie (implementacja metody testdocument() została zmieniona na potrzeby ćwiczenia). Metoda testdocument() po zmianach jest w stanie odnosić się do wstrzykniętego komponentu Springa (DocumentService). Proszę przetestować metodę w praktyce. W aplikacji Postman powinniśmy otrzymać kod odpowiedzi serwera 200 OK oraz komunikat Jestem komponentem Springa i można mnie wstrzykiwać (komunikat został wygenerowany w serwisie, przesłany do kontrolera i zwrócony w usłudze). Poniżej został przedstawiony wynik działania usługi (logi serwera). 11