Kurs Spring Boot #03 - Jak tworzyć REST API?

Поділитися
Вставка
  • Опубліковано 30 січ 2025

КОМЕНТАРІ • 125

  • @matdabski
    @matdabski  4 роки тому +3

    Jeśli podobają Ci się moje filmy, to zostaw łapkę w górę i za subskrybuj mój kanał. Zapraszam Cię także do zapoznania się z moimi kursami i warsztatami:
    🟢 Kurs Hibernate i JPA - kursy.nullpointerexception.pl/hibernate/
    🟠 Warsztat Architektura Heksagonalna - kursy.nullpointerexception.pl/product/warsztat-architektura-heksagonalna/
    🟢 Kurs Testy Jednostkowe - kursy.nullpointerexception.pl/testy-jednostkowe/
    🟠 Warsztat Architektura Warstwowa - kursy.nullpointerexception.pl/product/warsztat-architektura-warstwowa/

  • @roxo2137
    @roxo2137 Рік тому +1

    Męczyłem się sporo czasu ze Swaggerem, tak jak poprzednicy, aż w końcu wyczytałem, że lepiej użyć starszej wersji springa (2.7.16), ja używałem 3.1.4. W zasadzie opcjonalnym rozwiązaniem dla Swaggera będzie użycie Postmana - minus taki, że nie będzie to tak wszystko ładnie wyglądać jak przy UI. Odcinek dużo wniósł do mojej wiedzy, pozdrawiam ;)

  • @infinitezymalny
    @infinitezymalny 4 роки тому +2

    Bardzo fajnie że pokazuje Pan błędy, które się pojawiają :)

  • @bartekszablewski7604
    @bartekszablewski7604 4 роки тому +5

    Świetny kurs, świetnie wytłumaczone! :)

  • @Janowik17
    @Janowik17 4 роки тому +2

    Baaardzo dobry materiał. Niby 30min ale przekazałeś dużo wiedzy.
    Chętne obejrzałbym odcinek również z REST API ale takie bardziej rozbudowane, np kiedy używać Optional, ResponseEntiy ze zwracanymi kodami odpowiedzi HTTP (jakie kody zwracać w danej sytuacji).
    Czekam na kolejny odcinek.

    • @matdabski
      @matdabski  4 роки тому +2

      Dzięki za komentarz. Zapiszę sobie i może za jakiś czas wykombinuję taki odcinek ;)

  • @sebasw91
    @sebasw91 4 роки тому

    Dzięki za kurs. Jak ktoś ogarnia podstawy, to fajnie, szybko przelatujesz przez wszystkie istotne zagadnienia dopowiadając pewne rzeczy, które mogły umknąć w trakcie nauki.

  • @HasNoName69
    @HasNoName69 4 роки тому

    Kanał właśnie odkryłem i mimo że te tematy już przerobiłem, to z przyjemnością obejrzałem.

  • @Ciunex
    @Ciunex 2 роки тому

    Dzięki za dużą dawkę wiedzy

  • @Piox899
    @Piox899 4 роки тому

    Komentarz dla zasięgu.
    Świetny kurs wszystko dokładnie wytłumaczone. Czekam na kolejny odcinek. Pozdrawiam.

  • @joachimtworko4466
    @joachimtworko4466 4 роки тому +1

    Dobry materiał!

  • @xantooo222
    @xantooo222 4 роки тому

    Dzięki za kurs, plusik!

    • @matdabski
      @matdabski  4 роки тому

      Dzięki za komentarz ;)

  • @knowa130
    @knowa130 2 роки тому

    Mateusz, bardzo podoba mi się Twój styl tłumaczenia. Jak zrobisz kursy do certyfikacji Java i Spring to pierwszy kupię :)

    • @matdabski
      @matdabski  2 роки тому

      Nie jestem zwolennikiem certyfikatów. Wolę uczyć innych tego co im się przyda na co dzień w pracy, w życiu itd. Dlatego się staram tworzyć bardzo praktyczne kursy. Zwłaszcza że teraz certyfikaty nie są aż tak popularne jak kiedyś 😉

    • @knowa130
      @knowa130 2 роки тому

      @@matdabski Rozumiem, anyway, bardzo dobrze się ogląda, tak trzymaj :)

    • @matdabski
      @matdabski  2 роки тому

      @@knowa130 Dzięki 😉

  • @dawidwidulinski4081
    @dawidwidulinski4081 4 роки тому

    super szkolenia! Czekam na więcej :)

  • @certe6799
    @certe6799 4 роки тому

    Super sprawa, czekam na więcej :)

  • @haze3918
    @haze3918 2 роки тому +2

    Bardzo przyjemny kursik :D
    Pytanko: jeżeli w swaggerze chce wykonać metodę getPost() i w błedzie 500 nie otrzymam wiadomości która ty zaimplementowałeś wyjątku czyli "Not implemented yet!", jest to błąd implementacji wyjątku w kontrolerze?
    Konkretnie chodzi mi to co znajduje się w Response Body
    {
    "message": "Not implemented yet!"
    }

    • @matdabski
      @matdabski  2 роки тому +2

      W nowszych wersjach Spring Boota, komunikaty trzeba włączyć specjalnym propertiesem:
      server.error.include-message=always

    • @jekbe9395
      @jekbe9395 4 місяці тому

      @@matdabski super uratowałeś godziny szukania że źle nazwałem pole w klasie post

  • @devdwr9208
    @devdwr9208 4 роки тому +1

    Super film! Czy zrobiłbyś film, w którym wytłumaczyłbyś relacje między encjami w JPA w teorii oraz na przykładach. Pozdrawiam :)) !

    • @matdabski
      @matdabski  4 роки тому +5

      To tak jakby bardziej tematyka Hibernate'a i nie do końca pasuje mi do kursu Spring Boota. Zobaczymy, jak skończę ten kurs, to może coś pomyślę nad Hibernatem

  • @ajanuszkiewicz
    @ajanuszkiewicz 4 роки тому +13

    Może się komuś przyda po wgraniu swaggera 3.0.0, mi akurat program nie odpalił, jednak po zmianie na wersji 2.9.2 udało się

    • @Adi-ft4eh
      @Adi-ft4eh 4 роки тому +3

      Dzięki, przydało się

    • @marekborecki1116
      @marekborecki1116 3 роки тому +7

      Hej, 3.0.0 działa trochę inaczej
      tutaj znalazłem rozwiązanie stackoverflow.com/a/66260503/9304291
      1. Zamień tamte dwa dependency z tym ->implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0'
      2. usuń adnotację @EnableSwagger2 z klasy config
      3. otwórz przeglądarkę pod adresem localhost:8080/swagger-ui/index.html

    • @TomaszProkop_99FOTO
      @TomaszProkop_99FOTO 3 роки тому +1

      Dodatkowo gdyby ktoś chciał zrobić uploadFiles(@RequestPart("uploadfiles") MultipartFile[] uploadfiles) to w wersji 2.9.2 jest to niemożliwe, natomiast w 3.0.0. działa świetnie.

    • @terapiaMulinowa
      @terapiaMulinowa 3 роки тому +2

      @@marekborecki1116 Dzięki za instrukcję dla swaggera 3 :) u mnie działa

    • @Stecyk14
      @Stecyk14 3 роки тому

      mi po usunięciu adnotacji EnableSwagger zaczeło działać, ale znowu nie wejde w przeglądarce do tego bo swagger nie istnieje. Wyskakuje błąd po załączeniu Swaggera, create breakpoint

  • @kris4781
    @kris4781 4 роки тому +2

    Fajny kurs :)
    Mam pytanie, używasz gradle i generujesz dane w build.gradle. Jeśli użyję mavena to gdzie umieszczam metodę do tworzenia tych danych jeśli nie mam "build.gradle"?

    • @matdabski
      @matdabski  4 роки тому

      To jest akurat zaletą Gradle, że możesz dopisać kawałek skryptu w groovym ;) W Mavenie, bezpośrednio nie masz takiej opcji. Może istnieją jakieś pluginy, ale nie znam żadnego ;)

    • @matdabski
      @matdabski  4 роки тому +1

      Albo jak chcesz sobie to jakoś wygenerować, to możesz po prostu stworzyć dodatkową klasę w Javie z metodą main i tam to umieścić.

    • @kris4781
      @kris4781 4 роки тому

      @@matdabski dzięki za szybką odpowiedź!

    • @jankowalsky9473
      @jankowalsky9473 4 місяці тому

      @@matdabski To wlasnie ChatGPT podpowiada :)

  • @Daniel-looo
    @Daniel-looo 3 роки тому +1

    Co zrobić gdy h2 nie chce załadować danych z data.sql? DDL się generuje poprawnie, ręczne inserty z konsoli h2 też działają. W logach jest tylko jeden warning związany z spring.jpa.open-in-view, zmienianie tego nic nie zmieniło. Spring.datasource.initialization-mode=always nie pomogło. Proszę o pomoc

    • @matdabski
      @matdabski  3 роки тому +1

      Hm, ciężko coś powiedzieć, generalnie to dosyć prosty mechanizm, więc jeśli zrobiłeś wszystko dobrze, to powinno działać. Spróbuj może przebudować projekt, może coś pomoże.

    • @radoslawjaneczko3644
      @radoslawjaneczko3644 3 роки тому +1

      Miałem taki przypadek, że ładowało się wszystko poza postami. Okazało się, po włączeniu debugowania Hibernate, że przy tworzeniu repozytorium dla postów tabela z postami była usuwana i tworzona na nowo - pusta. Zapomniałem dodać spring.jpa.hibernate.ddl-auto=none w application.properties. Po dodaniu wszystko działa jak trzeba.

  • @DuDiiC
    @DuDiiC 4 роки тому

    Hej! Super materiał, bardzo konkretnie, bez rozdrabniania się nad zbędnymi rzeczami. Mam jedno pytanie. Czy jest jakiś konkretny powód, dla którego tworzysz schemat bazy w SQL i dodajesz dane insertami? Pzyzwyczajony jestem do sposoby ze stworzeniem klas odwzorowujących tabele, dodaniu do nich adnotacji i w application.properties linii "spring.jpa.hibernate.ddl-auto=create". Twoja metoda ma jakieś konkretne zalety, czy jest to po prostu kwestia "gustu" w większości przypadków?

    • @matdabski
      @matdabski  4 роки тому +2

      Tak, robię to z konkretnego powodu. Takie podejście daje mi większą kontrolę nad tym, jak wygląda schemat bazy danych (dokładnie 100% kontroli). Jak pozwalasz Hibernate'owi tworzyć tabele, kolumny, indeksy, klucze obce, to robi on to "po swojemu". Jeśli źle skonfigurujesz relacje pomiędzy encjami, to Hibernate odwzoruje twoje błędy w tabelach (i w sumie bardzo często się tak dzieje).
      Dlatego najpierw tworzę prawidłowy model bazy danych. Wiem, jak powinien wyglądać, więc tworzę go w odpowiedni sposób. Do tego dostosowuję mapowanie encji. Jeśli moje mapowanie encji nie chce współpracować z tabelami, to od razu widzę, że mam złe mapowanie, bo wywalają się błędy. W odwrotnej sytuacji nie ma żadnego ostrzeżenia, bo przecież Hibernate nie wie, co chciałeś z mapować i dla niego każde twoje mapowanie jest ok.
      Złe mapowanie, może być przyczyną problemów wydajnościowych nawet w małej aplikacji.
      Poza tym jest jeszcze kilka drobniejszych powodów, dlaczego tak robię, ale wyszedłby z tego całkiem spory artykuł i może opisze to w najbliższym czasie na blogu.
      Zapraszam do napisania się na newsletter nullpointerexception.pl/newsletter/

    • @DuDiiC
      @DuDiiC 4 роки тому

      @@matdabski wow, dzięki za szybką i przede wszystkim szczegółową odpowiedź. Chyba skorzystam, bo naprawdę emanujesz konkretną wiedzą, a że sam jestem dopiero na początku kariery to trzeba czerpać od najlepszych ;) pozdrawiam

    • @matdabski
      @matdabski  4 роки тому

      Dzięki ;)

  • @maciejsobolewski7675
    @maciejsobolewski7675 3 роки тому

    Witam, mam pewne pytanie co do skrótów klawiszowych. Jaki skrót należałoby zastosować jeśli mamy np. pare linijek w prawo, a chciałbym je wyrównać do lewej strony? W prawą strone przesuwamy za pomocą zaznaczenia wszystkeigo i taba, a lewo? Pozdrawiam.

    • @matdabski
      @matdabski  3 роки тому

      Shift + TAB, poza tym w Intellij jest skrót do formatowania składni CTRL + ALT + L. Polecam jeszcze obejrzeć mój film o pracy w Intellij ua-cam.com/video/Rply-mi_J7o/v-deo.html

    • @maciejsobolewski7675
      @maciejsobolewski7675 3 роки тому

      @@matdabski dziękuję bardzo

  • @przemysawmaecki9958
    @przemysawmaecki9958 2 роки тому

    Hej, super kurs :). Czy może podpowiedzieć dlaczego w pliku data. sql nie zapisują się inserty post do bazy, a zapisują się inserty comment. Jak wchodzę do bazy H2 i wpiszę manualnie to bez problemu rekordy się pojawiają w tabeli post. Z góry dzięki za podpowiedź i pozdrawiam.

    • @matdabski
      @matdabski  2 роки тому

      Być może nie dodałeś propertisa dla Hibernate. I Hibernate usuwa i jeszcze raz tworzy tabele. I wygląda tak jakby nie dodwały się posty

    • @przemysawmaecki9958
      @przemysawmaecki9958 2 роки тому

      @@matdabski zrobiłem create-drop i nie było "postów" w H2. Zmieniłem na none i zapisuje. Dzięki serdeczne za pomoc :). Mam jeszcze pytanie co może być przyczyną jak metoda getPosts przy użyciu swaggera, czy postmana zwraca pustego JSONA tzn. code 200 a response body w formie [{},{},{}]

    • @matdabski
      @matdabski  2 роки тому

      @@przemysawmaecki9958 nie masz getterów w encji Post?

    • @przemysawmaecki9958
      @przemysawmaecki9958 2 роки тому

      @@matdabski Miałem, ale zauważyłem, że kompilator krzyczy, że nie używam pól w klasie Post. Okazało się, że Lombok mi nie działa w STS. Chciałbym mieć Inteligij, ale życzą sobie za dużo kasy i programuje w STS. Dzięki jeszcze raz za pomoc i jadę dalej :).

    • @matdabski
      @matdabski  2 роки тому +1

      @@przemysawmaecki9958 IntelliJ IDEA Community Edition jest zupełnie darmowe i wystarczające. Ja z niego korzystam w tym filmie. Nikt nie korzysta z STS, serio!

  • @zoltobialozielony
    @zoltobialozielony 3 роки тому

    hejo, trzy pytanka
    1. update przy uzyciu jpa repository, to branie po idku i zmiana setterami pol, ale trzeba wszedzie sprawdzac czy request nie ma nuli?
    2. jakbys ugryzl encje z obrazkiem? array byte czy multipart w controllerze a pozniej na array of bytes?
    3. nad @Entity @Table nie powinno byc equals i hashcode?

    • @matdabski
      @matdabski  3 роки тому

      1. Tak, jeśli przeszkadzają Ci nulle to sprawdzasz.
      2. Zwykle nie zapisuje obrazków w bazie tylko na dysku, a w bazie trzymam tylko nazwę i ewentualnie ścieżkę. Są plusy i minusy trzymania obrazków w bazie. Ale jak chcesz trzymać w bazie to chyba tablica bytów i wrzucasz do bloba (nie pamiętma dokładnie)
      3. Jak trzymasz encje powiązane relacją w setach, to tak. Ale generowanie tych metod za pomocą adnotacji Lombok, nie jest dobrą praktyką, lepiej zaimplementować je odpowiednio. Jest na to kilka opcji.

    • @zoltobialozielony
      @zoltobialozielony 3 роки тому

      @@matdabski dzięki za odpowiedz, a te nulle to sprawdzasz na poziomie service/repo/controller czy adnotacje masz jakieś? Czyli jak na przykład bawie się amazonem to takie obrazki trzymać w na przykład s3? :-) miłego dnia

    • @matdabski
      @matdabski  3 роки тому

      @@zoltobialozielony tak, jak najbardziej s3. Nulle można sprawdzać adnotacjami, zobacz sobie najnowszy materiał o mapowaniu. Co prawda tam nie ma nic o nullach, ale jest trochę o adnotacjach walidujących. A do nulli masz @Notnull.
      ua-cam.com/video/yyZtxniWWGM/v-deo.html

    • @zoltobialozielony
      @zoltobialozielony 3 роки тому

      @@matdabski na pewno obejrze, akurat skonczylem 04, a po pracy sobie jeszcze klepie swoj projekt, natomiast w zwiazku z tym, ze w robocie robimy 99% w apachu camelu, to taki kurs mi duzo pomaga! Dzieki bardzo!

  • @Damian-cw2lh
    @Damian-cw2lh 3 роки тому

    Cześć.
    Gdzie się podziały adnotacje @Translactional dla metod w Serwisach? Można to jakoś ustawić za pomocą konfiguracji?

    • @matdabski
      @matdabski  3 роки тому

      Nie są wymagane, jak masz jedną operację na bazie danych np. jeden select to nie musisz dawać @Transactional, z tego co pamiętam w spring boot jest włączony auto commit, więc każda operacja działa w osobnej transakcji. Jak masz tylko jedną operację w metodzie, to w tym wypadku dodanie @Transactional nic nie wnosi. Chyba w 6 części robię metody z @Transactional.

    • @Damian-cw2lh
      @Damian-cw2lh 3 роки тому

      @@matdabski
      Dzięki za odpowiedź!

  • @karloss98
    @karloss98 3 роки тому

    cześć, pytanko. Odnośnie generowania danych testowych. Postanowiłem napisać skrypt, ale poprzez normalną metodę w javie. Problem w tym, że przy uruchomieniu programu dane sql są pobierane z poprzedniego uruchomienia programu.
    Instancja klasy w bloku main oraz wywołanie metody generowania danych jest wywołana przed linijką uruchamiania aplikacji springa. Jakie mogę zastosować rozwiązanie? Pozdrawiam :)

    • @matdabski
      @matdabski  3 роки тому +1

      Wystarczy, że tylko raz wygenerujesz dane. Ja task w gradlu odpalam tylko raz, generuję dane, dane zapisują się do pliku i tyle. Nic więcej z tym nie robię. To taka dodatkowa funkcjonalność, dzięki której po prostu ułatwiam sobie życie. Możesz wygenerować te dane, tak jak to robisz. Zapisać bezpośrednio do pliku, lub nawet skopiować z konsoli i zapisać ręcznie do pliku i po prostu z nich korzystać przy każdym uruchomieniu aplikacji.

    • @karloss98
      @karloss98 3 роки тому +1

      @@matdabski super, dzięki za rozwianie wątpliwości :)

  • @Michal111M1
    @Michal111M1 2 роки тому

    Witam, po 2h walki poddaję się. Wyskakuje mi błąd podczas uruchamiania spring boota: Unsatisfied dependency expressed through constructor parameter 0; Szukałem na StackOverflow i w netach i nic. Może coś podpowiesz. Kod sprawdzałem 10 razy... Dodam, że aplikacja nie włącza się prawidłowo zaraz po dodaniu interfejsu PostRepository

    • @matdabski
      @matdabski  2 роки тому

      "parametr 0" to pierwszy parametr konstruktora. W błędzie powinieneś mieć klasę i linijkę, w które występuje ten błąd. Może to wynikać z tego, że np. w serwisie nie dodałeś adnotacji @Service, albo nie dodałeś extends w repozytorium (trochę tutaj zgaduję). Generalnie Spring nie utworzył beana dla klasy, którą chcesz wstrzyknąć i teraz zwraca Ci błąd, że nie ma co wstrzyknąć.

  • @csgotradergrucha1680
    @csgotradergrucha1680 4 роки тому

    W jaki sposób i kiedy następuje zamiana danych z tabeli bazy danych na obiekt POST? Czy to sie nazywa serializacja?

  • @marcinromaniak1549
    @marcinromaniak1549 4 роки тому +1

    Korzystam z mavena, utworzyłem więc klasę która zapisuje mi rekordy do pliku data.sql, jednak rekordy te nie wyglądają tak jak u Ciebie, wygląda to w en sposób iż wartość 'i' nie jest inkrementowana, mógłbyś nakierować w jaki sposób w kodzie javy po zapisie do pliku data.sql uzyskać taką formę jak u Ciebie? Rekordy w moim pliku wyglądają w ten sposób:
    insert into POST(id, title, content, created) values (${i}, 'Test post ${i}', 'Content ${i}', '2020-07-11T14:26:43.612121200');
    Pętla do zapisu rekordów do pliku:
    for (int i = 1; i

    • @matdabski
      @matdabski  4 роки тому +1

      W ten sposób nie zrobisz tego w Javie. Powinieneś zrobić tak: "values ("+i+"'Test post "+i+"','Content...
      Ewentualnie możesz pobawić się formaterami dostępnymi w Javie:
      String.format("tutaj string %d", i);
      lub
      Message.format("tutaj string {0}", i);

    • @jakubmaterla8081
      @jakubmaterla8081 4 роки тому +1

      W którym miejscu utworzyłeś tą klasę, w której zapisujesz inserty do pliku?

  • @elfiorr
    @elfiorr 3 роки тому

    Mateusz mam pytanie. Jak wyświetlić np wszystkie komentarze z postami. Na tym przykładzie trochę dziwnie. Ale w skrócie, mam api, pobieram listę krajów, mam joina i zwraca mi wszystkie Kraje a w response z modelu mam informacje o miastach dla danego kraju(one to mamy). I niby powinno być prosto, ale kompletnie nie wychodzi mi pobranie wszystkich miast, z polem wskazującym do jakiego kraju należą dane miasta. Udało Mi się pobrać id klucza obcego kraju dla miast , ale ja chce mieć w stringu taka informacje. Pomożesz?

    • @matdabski
      @matdabski  3 роки тому

      Opisałem dokładnie jak trzeba to zrobić. Robisz joina tabel państw i miast (w miastach powinieneś mieć klucz obcy id_państwa lub coś podobnego). I to tyle. Może robisz coś źle, gdzieś popełniasz błąd i dlatego to nie działa, nie wiem.

  • @2605mac
    @2605mac 4 роки тому

    Co powinienem umieć, znać jeśli chodzi o znajomość Javy, żeby móc płynnie przejść do frameworku Spring?

    • @matdabski
      @matdabski  4 роки тому +1

      Podstawy, czyli składnia, tablice kolekcje. No i oczywiście musisz umieć coś napisać w Javie. Tak naprawdę im więcej umiesz, tym łatwiej będziesz sobie radził ze Springiem

    • @vert3x560
      @vert3x560 4 роки тому +4

      Rozumieć czym jest Java Reflection API, jak działa IoC Container i adnotacje.
      Najbardziej ludzi gubią adnotacje bo przejście z myślenia typowo OOP na AOP jest czasami ciężkie.
      Dodatkowo zrozumienie czym jest Dependency Injection i Kontekst Aplikacji.
      To są takie fundamenty na których opiera się spring, oczywiście da się Springa ogarnąć bez tego wszystkiego, ale może to być droga przez mękę, albo bezmyślne kopiuj-wklej z tutoriali na yt/stack overflow.
      Polecam też ogarnąć Java Persistance Api (ponieważ spring data z tego korzysta, ale to nie znaczy, że JPA jest częścią springa, bo to często też się początkującym myli).

  • @MESHIv16
    @MESHIv16 4 роки тому

    Nie mogę sobie poradzić z @Entity, tzn. w ogóle po dodaniu zależności nie ma w moim IntelliJ javax.persistence, jak z tym sobie poradzić?

    • @matdabski
      @matdabski  4 роки тому

      Projekt jest dostępny na githubie. Porównaj czy masz takie same zależności
      github.com/matdabrowski/SpringBootTutorialUA-cam/blob/master/build.gradle
      Jeśli masz tak samo i nadal nie działa, możesz jeszcze spróbować zaimportować projekt jeszcze raz (w Intellij jest zakładka Gradle stamtąd możesz zrobić reimport)

  • @ajanuszkiewicz
    @ajanuszkiewicz 4 роки тому

    Doszedłem do momentu gdzie wpisuje "private final PostRepository postRepository;" (zaraz po stworzeniu repozytorium)dodaje " @RequiredArgsConstructor" i dalej kompilator pokazuje że coś jest nie tak. Z podpowiedzi jakie dostaje na "alt +enter" "Variable 'postRepository' might not have been initialized". Mam wrażene jak by lombok mi tego nie wstrzyknoł :/

    • @matdabski
      @matdabski  4 роки тому +1

      Masz zainstalowany plugin lomboka w Intellij? Jeśli tak to spróbuj Build > Rebuild project

    • @ajanuszkiewicz
      @ajanuszkiewicz 4 роки тому

      @@matdabski o ja gamoń jakis sposobem nie wgrałem lomboka :/, ale dzięki wielkie za szybka odpowiedz

  • @waldemarjankowski4090
    @waldemarjankowski4090 3 роки тому

    Cześć, świetny kurs, tylko napotkałem jeden problem.
    Otóż, przy próbie uruchomienia aplikacji wyskakuje mi komunikat:
    Parameter 0 of constructor in com.example.demo.service.PostService required a bean of type 'com.example.demo.repository.PostRepository' that could not be found.
    Mam jedną różnicę w porównaniu do przykładu z filmu. Nie używam bazy H2 a łączę się do lokalnej bazy na SQLServer. Do momentu dodania PostRepository wszystko było ok, jak dodałem to przy próbie wstrzyknięcia do PostService, błąd jak powyżej.
    Czym to może być spowodowane?
    Dodam, że interfejs PostRepository posiada adnotację @Repository, klasa PostService - @Service i @RequiredArgsConstructor, klasa PostController - @RestController i @RequiredArgsConstructor.
    Dodatkowo w klasie Application w adnotacji @SpringBootApplication wyłączyłem przez exclude klasę DataSourceAutoConfiguration.class bo sypało błędami: @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

    • @matdabski
      @matdabski  3 роки тому

      Z jakiegoś powodu spring nie stworzył beana postRepozitory. Powinien to być interfejs który dziedziczy po JpaRepository. W sumie trudno powiedzieć co może być przyczyną

    • @waldemarjankowski4090
      @waldemarjankowski4090 3 роки тому

      @@matdabski Dokładnie ta jest, publiczny interfejs dziedziczący po JpaRepository z adnotacją @Repository, wstrzykiwanie do serwisu robiłem zarówno przez pole, settera jak i konstruktor napisany przeze mnie i @RequiredArgsConstructor z Lomboka, różnica była taka, że zamiast "Parameter 0 of constructor..." komunikat mówił "Field ...".

    • @waldemarjankowski4090
      @waldemarjankowski4090 3 роки тому

      Po pobraniu projektu z repo i pousuwaniu zbędnych plików, problem jest taki sam, na początku pluł mi się o wersję JVM, więc zmieniłem w ustawieniach z 1.8 na 11, czy to może być tego wina? Tak czy siak, spróbuję utworzyć nowy projekt i przejść od początku tutorial raz jeszcze na bazie H2 zamiast SQL Server.

    • @matdabski
      @matdabski  3 роки тому

      @@waldemarjankowski4090 Hm, może przyczyną jest brak obsługi Lomboka. Masz włączone "Enable annotation processing"? Settings > Build > Compiller > Annotatnion pocessing

    • @waldemarjankowski4090
      @waldemarjankowski4090 3 роки тому

      @@matdabski tak, mam. Wszystko działa do momentu wstrzyknięcia Repository do serwisu, wtedy komunikaty jak wyżej. Zastanawiam się czy w wersji 2.6.2 spring boota się nic nie zmieniło w stosunku do 2.2.6 przez co krzyczy.

  • @iblis123123
    @iblis123123 4 роки тому +2

    Jakby komus przyszlo do glowy skorzystac z Swagger w wersji 3.x.y to inicjalizacja wyglada inaczej: github.com/springfox/springfox#migrating-from-earlier-snapshot

    • @matdabski
      @matdabski  4 роки тому +1

      Super, dzięki za komentarz Marcin ;)

  • @sevenbb3663
    @sevenbb3663 4 роки тому

    Importując wersje 3.0.0 Swaggera, nie ma annotacji @EnableSwagger2 ani żadnej podobnej. Możesz pomóc? SpringBoot 2.3.1

    • @matdabski
      @matdabski  4 роки тому +1

      Najlepiej jak byś w takie sytuacji zaglądał do dokumentacji lub repo na githubie. Z tego co widzę w wersji 3 jest adnotacja @EnableOpenApi
      github.com/springfox/springfox-demos/blob/master/boot-swagger/src/main/java/springfoxdemo/boot/swagger/Application.java

  • @bazejkrzesicki3076
    @bazejkrzesicki3076 4 роки тому

    Cześć, prośba o pomoc:
    Po dodatniu metody z id
    public Post getSinglePost(long id) {
    return postRepository.findById(id)
    .orElseThrow();
    }
    Dostaje cały czas błąd:
    Error:(21, 17) java: method orElseThrow in class java.util.Optional cannot be applied to given types;
    required: java.util.function.Supplier

    • @matdabski
      @matdabski  4 роки тому +2

      Ja używam Javy 11. Optional się trochę zmienił od Javy 11, doszły nowe metody. Metoda, której używam doszła w Javie 10. Po prostu nie masz tej metody w Javie 8, dlatego masz taki błąd.

    • @bazejkrzesicki3076
      @bazejkrzesicki3076 4 роки тому

      @@matdabski rzeczywiście, masz rację. Przerobiłem wszystko pod findAllById i działa. Dzięki!
      PS. Bardzo fajny kurs!

  • @infinitezymalny
    @infinitezymalny 4 роки тому +1

    propozycja: testowanie

    • @matdabski
      @matdabski  4 роки тому

      Co do testów, to zapraszam Cię do mojego kursu o testach jednostkowych w Junit5. Cały kurs pomaga wystartować z tematem testów od zera. Jest w nim zawarte bardzo dużo przydatnych informacji pomagających poradzić sobie z każdą sytuacją testową. Kurs aktualizowałem na początku czerwca. Doszły dwa ciekawe przykłady, między innymi przykład jak odpalić testy integracyjne. Zapraszam. kursy.nullpointerexception.pl/mini-kurs-testy-jednostkowe-start/

  • @dl00gi
    @dl00gi 4 роки тому

    Chciałbym znaleźć komentarze przyporządkowane do konkretnego posta, dla którego daję id w zapytaniu. Jak powinien wyglądać taki mapping? Spring Data chyba tak super łatwo tego nie umożliwia?
    Próbowałem z czymś takim, ale nie działa
    @Service
    @RequiredArgsConstructor
    public class CommentDao {
    @PersistenceContext
    private final EntityManager entityManager;
    public List findCommentsByPostId(long id) {
    return entityManager.createQuery("SELECT c from Comment c JOIN Post p ON p.id = c.id where p.id = :id").setParameter("id",id).getResultList();
    }
    }

    • @matdabski
      @matdabski  4 роки тому +1

      Cześć Grzegorz ;) Jak korzystasz z Spring Data, to prawie nigdy nie ma potrzeby korzystania ze Entity Managera. W 5 części, która będzie dostępna jutro o 9-tej. Dodaję do encji Comment pole postId. Bo w bazie ono istnieje od początku. I dodaję też CommentRepository, więc jak już masz repository i to pole to wystarczy w tym repository zrobić metodę np. findAllByPostId(Long postId). I to tyle ;)

    • @dl00gi
      @dl00gi 4 роки тому

      @@matdabski Właśnie do tego pola nie mogłem się dostać, A Entity Managera dodałem, żeby pokombinować "obok". Teraz już wszystko jasne, dziękuję :)

  • @pawenowinski2072
    @pawenowinski2072 3 роки тому

    Tabela wiele do wielu to zła praktyka.

    • @matdabski
      @matdabski  3 роки тому +2

      Nie. Ale skoro tak twierdzisz, to uzasadnij swoje twierdzenie. Dlaczego według Ciebie to zła praktyka?

    • @pawenowinski2072
      @pawenowinski2072 3 роки тому

      @@matdabski Czemu usuwasz moje komentarze ?

    • @matdabski
      @matdabski  3 роки тому +3

      @@pawenowinski2072 Nie usuwam.

  • @vladeb1104
    @vladeb1104 2 роки тому +1

    Uda£o sie zaimplementować mavena pod jdk8 pod eclipse. Od razu na starcie pojawia się problem, który (chyba) omawiasz w filmie o maven czyli brak możliwości (albo mocno utrudnione) tworzenia tasków. Jak zacząłem szukać rozwiązania to stwierdziłem, że szkoda mi dnia i po prostu zrobiłem komponent do seedowania bazy. Niestety tworzy to problem bo maven najpierw sie uruchamia a dopiero potem uaktualnia data.sql i apke trzeba uruchomić dwa razy na początku. Inaczej na razie nie umiem więc zostawiam tak jak jest. Kolejny problem to swagger (2.9.2) i akurat u mnie zadziało dopisanie odpowiedniej linii w application.properties: spring.mvc.pathmatch.matching-strategy=ant_path_matcher. Nie wiem dlaczego tak działa więc się nie wypowiadam. Generalnie typowa apka ale jak zwykle rewelacyjnie dopowiadasz co sie tak naprawde dzieje w trakcie uruchamiania itd itd. Mój największy problem jak na razie to rozumienie tych wszystkich komend w application.properties. Nie wiem skąd bierzesz te informacje na ich temat. Pewnie z jakiejś opasłej dokumentacji. Wielkie dzięki za bardzo wartościowy materiał.

    • @matdabski
      @matdabski  2 роки тому +1

      Swaggera można podłączyć z innej nowszej paczki w wersji springdoc-openapi v1.6.6, chociaż nie wiem jak to wszystko będzie działało z tym co tutaj jest.
      Co do propertiesów to jest dokumentacja do nich docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html

  • @jakub.686
    @jakub.686 3 роки тому

    Sciagnalem projekt z Gita i wywala mi blad, na stack over flow pisza ze moze byc bardzo duzo przyczyn, Pomocy ! :)
    com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

    • @matdabski
      @matdabski  3 роки тому +1

      Masz zainstalowany serwer Mysql, jak tak to, czy jest uruchomiony?

    • @jakub.686
      @jakub.686 3 роки тому

      Mam tylko zainstalowanego Workbench 8.0, spróbuje zainstalowac Server :)
      Zainstlowalem server i jest błąd: Caused by: liquibase.exception.DatabaseException: java.sql.SQLException: Access denied for user 'youtube'@'localhost' (using password: YES)
      terasz musze znalezc gdzie zmienic to haslo :)