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/ 🔴 Jeśli dostajesz błąd: Database "" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149 to: Dodaj do application.properties taki wpis: spring.datasource.url=jdbc:h2:mem:testdb Wtedy po uruchomieniu aplikacji w logu powionien pojawić się taki wpis (...) H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' i wszytko powinno działać w tym momencie poprawnie. 🔴 15:45 popełniłem mały błąd. Metod a wktórej zmieniam object mapper nie zadziała w ten sposób. Żeby to zadziałało musisz wykorzystać jedną z trzech poniższych opcji: 1. Dokładnie tak jak jest to na filmie, tylko dodajemy adnotacja @PostConstruct nad metodą: @Autowired private ObjectMapper objectMapper; @PostConstruct void customizeObjectMapper() { objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); } 2. Object mapper można wstrzyknąć bezpośrednio do metody jako parametr: @Autowired void customizeObjectMapper(ObjectMapper objectMapper) { objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); } 3. Można stworzyć beana, który nadpisze domyślny object mapper: @Bean public ObjectMapper customizeObjectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); return objectMapper; }
Niby normalny start projekciku jakich wiele na YT, ALE to co domawiasz w trakcie jest czymść czego jeszcze nie spotkałem na tym poziomie. Dzięki temu poznałem dużo nowych rzeczy. Tutorial można spokojnie symulować na Maven pod Eclipse.
Fajny materiał, dobrze wytłumaczone, przydałby się materiał o konfigurowaniu i implementacji uwierzytelniania oraz autoryzacji w springu, ponieważ jest mało tego typu materiałów, a większość jest tylko przedstawiona bardzo pobieżnie. Lub też stworzenie bramy gateway w spring cloud. Pozdrawiam
Od października zeszłego roku wracam teraz ponownie, żeby wszystko utrwalić. Jednak jak się drugi raz przechodzi tutorial z doświadczeniem w postaci własnych aplikacji Springowych, to wiedza lepiej wchodzi.
Bardzo chciałbym wiedzieć jak poprawnie konfigurować te wszystkie rzeczy do javy gdy chcemy utworzyć jakiś większy projekt np. używając Maven'a, testów jednostkowych, połączenia z bazą danych itp. Jak nad tym ,,zapanować" żeby nie tworzył się śmietnik w projekcie.
Ze Spring Boot wszystko masz bardzo uproszczone i tak naprawdę nie trzeba za wiele konfigurować. Czy używasz Mavena czy Gradle'a działa to podobnie. Co do "większy projekt", to każdy projekt na początku jest mały i tak naprawdę nie wiesz jak bardzo urośnie, więc wszystko konfiguruje się tak samo w mały i dużym projekcie😉 Co do zapanowania nad śmietnikiem, to tak jak ze wszystkim, trzeba cały czas pilnować porządku 😉 W trzecim odcinku będzie o tym jak tworzyć restapi i może tam będzie więcej na ten temat(jeszcze przygotowuję ten odcinek)
@@matdabski " i tak naprawdę nie wiesz jak bardzo urośnie" Tutaj akurat nie do końca się zgodzę, ale to już temat na osobny kurs pewnie i nie dla początkujących. Jeśli ktoś stosuję DDD, to powinien wiedzieć na przykład dzięki Event Storming jak bardzo duże będą te moduły, gdy się skończy programować. Oczywiście z czasem one delikatnie mogą się rozrosnać, ale to tylko w ramach swojego bounded contextu. Ogólnie tak jak szybko przewijałem to się przyjemnie się patrzyło, dobra robota i flow. Zastanawiało mnie tylko, czy, aby na pewno to jest "wprowadznie" i odbiorca wie co to jest na przykład "Bean". Myślę, że przed tym można jeszcze podstawy bardziej omówić jako "wprowadzenie do kursu". Pozdrawiam, Kamil
Dzięki za komentarz. Szacowanie projektów to generalnie temat rzeka 😉 Teoretycznie da się określić jak mniej więcej będzie wyglądał projekt w fazie końcowej. Ale są różne projekty i często początkowe założenia rozjeżdżają się z tym co jest w końcowej fazie projektu... Kurs będzie dotyczył raczej samego Sring Boota i tego jak napisać aplikację. Nie chciałem tu wykładać podstaw samego Springa itp. Musiałem przyjąć jaki zakres jestem w stanie zrealizować i trochę podstawy Springa mi nie pasowały.
Zmiana ustawień object mappera nie zadziała w ten sposób. Metoda customizeObjectMapper() nie jest wykonywana po starcie aplikacji. Object mapper pozostanie bez zmian.
Dzięki za komentarz. Masz rację, to tak nie zadziała. Czegoś tam brakuje, niestety nie jestem w stanie sobie przypomnieć, jak to chciałem zrealizować (w notatkach też niestety mam błędną wersję). Podam więc tutaj kilka opcji na zrobienie tego: 1. Dokładnie tak jak jest to na filmie, tylko dodana adnotacja @PostConstruct nad metodą: @Autowired private ObjectMapper objectMapper; @PostConstruct void customizeObjectMapper() { objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); } 2. Object mapper można wstrzyknąć bezpośrednio do metody jako parametr: @Autowired void customizeObjectMapper(ObjectMapper objectMapper) { objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); } 3. Można stworzyć beana, który nadpisze domyślny object mapper: @Bean public ObjectMapper customizeObjectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); return objectMapper; }
Poszukaj w konsoli loga w stylu: main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:650550fa-7e1b-4f8d-8fe7-1241406ed2fa' Wklej to 'jdbc:.... ' w pole JDBC URL:
A może kiedyś wideo z wyświetlaniem danych z kilku serwisów pod jednym endpointem? Aktualnie walczę z czymś takim i ciężko coś znaleźć co by miało ręce i nogi
Patryk, tak naprawdę ciężko by było nagrać coś takiego, w sensie wymyślenie takiego przypadku byłoby ciężkie. Oczywiście na co dzień jest wiele takich sytuacji, ale przeniesienie tego na UA-cam, w taki sposób, żeby miało to jakąś wartość i żeby dało się to jakoś zrealizować, jest trudne. Ale pomyślę o tym, jest to jakieś wyzwanie, więc nie wykluczone, że się tym zajmę. Tylko na razie nie mam żadnego pomysłu, jak można byłoby coś takiego pokazać. Jak coś to jestem otwarty na propozycje. Możesz opisać mi tutaj, twój problem, ewentualnie, możesz napisać prywatną wiadomość.
Cześć Kamil, dzięki za komentarz. Oauth2 może się niedługo pojawi. Azura nie mam w planach na razie. A ostatnie nie do końca rozumiem;) Chcesz debugować konfigurację aplikacji, czy samą aplikację, a może chodzi Ci bardziej o testowanie aplikacji?
@@matdabski debugowac konfigurację która pisze wykorzystując klasy javowe. Chciałbym np czasami wiedzieć czy po wywołanie jakiejś metody odpali się klasa x i metoda y żeby wiedzieć czy konfiguracja zrobi to co chce. Ciężko mi to wyjaśnia ;)
@@Valantir007 to do tego masz testy jednostkowe, które pozwalają sprawdzić kod na najniższym poziomie czy w danej metodzie dzieje się to, co ma się dziać. Jeśli chcesz, przetestować powiedzmy całą metodę restową, to potrzebne są testy integracyjne np. ze mockMvc. O testach jednostkowych mam nagrany cały kurs. Zajmuję się teraz jego aktualizacją i na dniach dodam dwie nowe części i jedna będzie właśnie dotyczyła odpalania testów z mockmvc. Także zapraszam kursy.nullpointerexception.pl/mini-kurs-testy-jednostkowe-start/
W przypadku wersji intellij ultimate jest możliwość dodania nowych narzędzi springa przy już otwartym projekcie z perspektywy samego Intellija? Chodzi o to, czy jakaś opcja narzędzia oferuje nam dodawanie tych opcji tak jak przy tworzeniu projektu za pomocą spring initializr
@@KulfoneekPL możesz wyszukać sobie odpowiednie zależności na stronie initializera i korzystając z guzika Explore podejrzeć je i przekopiować do swojego projektu.
Po jakimś czasie aplikacja springoa zacząła mi się bardzo wolno odpalać, a nawet w ogóle przestała się uruchamiać. Tworzyłem ją na nowi w initializerze i za każdym razem zatrzymuje mi się przy kroku "Started RestapiApplication in 3.451 seconds (JVM running for 4.735)" i wtedy już nic się nie dzieje. Czy ktoś spotkał się z takim problemem?
Nie. Trzeba dodawać odpowiednie adnotacje w zależności od tego co chcesz zrobić. Zwykle klasa ta służy do definiowania odpowiednich beanów i wtedy używa się adnotacji @Bean
@@arturgorecki5803 tak dokładnie ;) już ktoś kiedyś o to pytał. Wkleję więc tutaj to, co wcześniej napisałem: Czegoś tam brakuje, niestety nie jestem w stanie sobie przypomnieć, jak to chciałem zrealizować (w notatkach też niestety mam błędną wersję). Podam więc tutaj kilka opcji na zrobienie tego: 1. Dokładnie tak jak jest to na filmie, tylko dodana adnotacja @PostConstruct nad metodą: @Autowired private ObjectMapper objectMapper; @PostConstruct void customizeObjectMapper() { objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); } 2. Object mapper można wstrzyknąć bezpośrednio do metody jako parametr: @Autowired void customizeObjectMapper(ObjectMapper objectMapper) { objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); } 3. Można stworzyć beana, który nadpisze domyślny object mapper: @Bean public ObjectMapper customizeObjectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); return objectMapper; }
@arturgorecki5832 jest jeszcze jedna metoda na to: Logikę inicjalizacji można również umieścić w konstruktorze jeśli korzystamy z wstrzykiwania zależności przez konstruktor (od wersji 4.3), wtedy wystarczy taki konstruktor: public Config(final ObjectMapper objectMapper) { this.objectMapper = objectMapper; objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); } Nie wiem czy jest to "polecana metoda", nie mniej działa.
Witam, caly czas wyrzuca mi blad w skladni SQL.... Kopiuje od Ciebie z gita... Pisze tez, ze należy wybrać połączenie ( The file is not linked yo any Connection)... Potrafiłbyś mi pomóc? Wszytsko mam tak jak Ty do tego momentu... Moze musze coś dodatkowo zainstalować?
Cześć, błąd w składni to może być cokolwiek, np. brakuje gdzieś spacji (w logu powinieneś mieć pokazane miejsce, gdzie jest błąd). Co do połączenia to nie wiem, o co chodzi. W komunikacie o błędzie (stacktrace) powinien być taki fragment (a nawet czasem jest kilka) "Caused by:" - tam znajdziesz przyczynę błędu. Możesz też tutaj wkleić ten komunikat, to może coś pomogę ;)
@@matdabski Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker': Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of URL [file:/C:/Users/Mateusz-PC/Desktop/LearnAPI2/LearnAPI2/build/resources/main/schema.sql]: CREATE TABLE POST ( id BIGINT PRIMARY KEY AUTO_INCREMENT , title VARCHAR(400) NOT NULL, contentsd VARCHAR(2000) NULL, ); nested exception is org.h2.jdbc.JdbcSQLException: Blad skladniowy w wyrazeniu SQL CREATE TABLE POST ( ID BIGINT PRIMARY KEY AUTO_INCREMENT[*] , TITLE VARCHAR(400) NOT NULL, CONTENTSD VARCHAR(2000) NULL, ) ; oczekiwano ) Syntax error in SQL statement CREATE TABLE POST ( ID BIGINT PRIMARY KEY AUTO_INCREMENT[*] , TITLE VARCHAR(400) NOT NULL, CONTENTSD VARCHAR(2000) NULL, ) ; expected ); SQL statement: CREATE TABLE POST ( id BIGINT PRIMARY KEY AUTO_INCREMENT , title VARCHAR(400) NOT NULL, contentsd VARCHAR(2000) NULL, ) [42001-60]
@@matdabski bardzo dziekuję, że wgl Pan odpowiada i chce Pan pomóc :) ale błąd występuje nadal, dziwne bo nawet po skopiowaniu kwerendy z innego działającego programu, pokazuje błąd składni Caused by: org.h2.jdbc.JdbcSQLException: Blad skladniowy w wyrazeniu SQL CREATE TABLE POST ( ID BIGINT PRIMARY KEY AUTO_INCREMENT[*] , TITLE VARCHAR(400) NOT NULL, CONTENTSD VARCHAR(2000) NULL ) ; oczekiwano ) Syntax error in SQL statement CREATE TABLE POST ( ID BIGINT PRIMARY KEY AUTO_INCREMENT[*] , TITLE VARCHAR(400) NOT NULL, CONTENTSD VARCHAR(2000) NULL ) ; expected ); SQL statement: CREATE TABLE POST ( id BIGINT PRIMARY KEY AUTO_INCREMENT , title VARCHAR(400) NOT NULL, contentsd VARCHAR(2000) NULL ) [42001-60]
W kursie jest tak, że w odcinkach 1-9 jest baza H2, a od 10-tego odcinka jest MYSQL. O wyborze bazy w Spring Boot decyduje zależność do sterownika danej bazy (dodana w build.gradle)
@@matdabski rozumiem, czy w takim razie istnieje jakieś wytłumaczenie na to, dlaczego nie chce mi utworzyć tabeli w jakimkolwiek języku? ciągle wyrzuca błąd... tak samo jak koledze drugiemu ;/
@@mateuszkaleta1495 niestety wytłumaczenie prawdopodobnie jest takie, że popełniasz gdzieś błąd. I nie piszę tego złośliwie, tak zwykle jest, że programista popełnia błąd i coś nie działa. Narzędzia działają w określony sposób i to Ty musisz się do nich przystosować, a nie one do Ciebie. Czytaj komunikaty błędów, tam jest odpowiedź na twoje pytanie. Na razie tylko Wy mieliście takie problemy, więc są możliwe dwa scenariusze: 1. Coś zmieniło się we frameworku (i gdy pobraliście nową wersję ze strony springa, nie chce to działać z moim kodem) - na razie wydaje mi się, że raczej to nie jest ta opcja. 2. To przypadek, że macie "podobne" błędy. W cudzysłowie podobne, bo tak naprawdę nie wiem jakie maci błędy. Na razie widziałem same literówki, więc nie traktuję tego jak błąd. Czytaj komunikaty błędów, jak nie wiesz co one oznaczają to spróbuje je wygooglować, wiele błędów jest już opisanych w sieci, więc można znaleźć rozwiązania szukając ich w google.
w pliku z propertiesami github.com/matdabrowski/SpringBootTutorialUA-cam/blob/master/src/main/resources/application.properties dodaj spring.datasource.url=jdbc:h2:mem:testdb
To nadal możesz korzystać z H2. A jak się bardzo upierasz przy Mssql to w apllication.properties musisz dodać odpowiednie propertiesy, które pozwolą Ci połączyć się z tą bazą i do tego musisz zamienić driver H2 na driver do mssqla (w build.gradle). Wszystko znajdziesz w google.
witam. a mi wyskoczyły takie błędy i w sumie wymiękłem, w desperacji (lub moje moje skromnej pomysłowości i zabawy plugnach) odinstalowałem inteliJ, z góry dzięki za pomoc Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker': Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of URL [file:/D:/programowanie/moje.demo/build/resources/main/schema.sql]: CREATE TABLE POST ( id BIGINT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(400) NOT NULL, content VARCHAR(2000) NULL, ); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: B��d sk�adniowy w wyra�eniu SQL "CREATE TABLE POST ( ID BIGINT AUTO_INCREMENT PRIMARY KEY, TITLE VARCHAR(400) NOT NULL, CONTENT VARCHAR(2000) NULL, )[*]"; oczekiwano "identifier"
Cześć, jak wyskakują Ci takie błędy to wystarczy wkleić fragment, który zaczyna się od "Caused by" np. Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: B��d sk�adniowy w wyra�eniu SQL "CREATE TABLE POST ( ID BIGINT AUTO_INCREMENT PRIMARY KEY, TITLE VARCHAR(400) NOT NULL, CONTENT VARCHAR(2000) NULL, )[*]"; oczekiwano "identifier" Masz błąd składniowy w sqlu. Zrobiłeś mały błąd na samym końcu VARCHAR(2000) NULL, )
Przy testowaniu połączenia do bazy h2 otrzymuję: Database "C:/Users/..." not found, either pre-create it or allow remote database creation (not recommended in secure environments). Czyli nie tworzy się automatycznie... Za materiał i tak masz łapkę w górę :)
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/
🔴 Jeśli dostajesz błąd: Database "" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149
to:
Dodaj do application.properties taki wpis:
spring.datasource.url=jdbc:h2:mem:testdb
Wtedy po uruchomieniu aplikacji w logu powionien pojawić się taki wpis
(...) H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'
i wszytko powinno działać w tym momencie poprawnie.
🔴 15:45 popełniłem mały błąd. Metod a wktórej zmieniam object mapper nie zadziała w ten sposób. Żeby to zadziałało musisz wykorzystać jedną z trzech poniższych opcji:
1. Dokładnie tak jak jest to na filmie, tylko dodajemy adnotacja @PostConstruct nad metodą:
@Autowired
private ObjectMapper objectMapper;
@PostConstruct
void customizeObjectMapper() {
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
2. Object mapper można wstrzyknąć bezpośrednio do metody jako parametr:
@Autowired
void customizeObjectMapper(ObjectMapper objectMapper) {
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
3. Można stworzyć beana, który nadpisze domyślny object mapper:
@Bean
public ObjectMapper customizeObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return objectMapper;
}
Nie ma już możliwości kupienia kursów?
@@miluusia Nie
Podoba, będę oglądał dalej :)
Super odcinek, dobrze się Ciebie słucha, konkretnie i bez bicia piany - czekam na kolejne!
Dzięki Agnieszka za miłe słowa 😉
Super, dzięki za odcinek. Bardzo dobrze się ogląda :)
Dzięki za miłe słowa ;)
Niby normalny start projekciku jakich wiele na YT, ALE to co domawiasz w trakcie jest czymść czego jeszcze nie spotkałem na tym poziomie. Dzięki temu poznałem dużo nowych rzeczy. Tutorial można spokojnie symulować na Maven pod Eclipse.
Dzięki za miłe słowa 😉
Wielkie dzięki za ten odcinek jak i za cały kurs, zapowiada się świetnie i biorę się do roboty ^^
Dzięki za miłe słowa Paba S 😉
Zajebisty odcinek bez kitu, pozdro!
Ciekawe materiały i bardzo pomocne :)
Dzięki ;)
Fajny materiał, dobrze wytłumaczone, przydałby się materiał o konfigurowaniu i implementacji uwierzytelniania oraz autoryzacji w springu, ponieważ jest mało tego typu materiałów, a większość jest tylko przedstawiona bardzo pobieżnie. Lub też stworzenie bramy gateway w spring cloud. Pozdrawiam
Jest w planach odcinek ze Spring Security.
Świetny materiał - bardzo konkretnie i rzeczowo.
Dzięki 😉
Od października zeszłego roku wracam teraz ponownie, żeby wszystko utrwalić. Jednak jak się drugi raz przechodzi tutorial z doświadczeniem w postaci własnych aplikacji Springowych, to wiedza lepiej wchodzi.
Bardzo chciałbym wiedzieć jak poprawnie konfigurować te wszystkie rzeczy do javy gdy chcemy utworzyć jakiś większy projekt np. używając Maven'a, testów jednostkowych, połączenia z bazą danych itp. Jak nad tym ,,zapanować" żeby nie tworzył się śmietnik w projekcie.
Ze Spring Boot wszystko masz bardzo uproszczone i tak naprawdę nie trzeba za wiele konfigurować. Czy używasz Mavena czy Gradle'a działa to podobnie. Co do "większy projekt", to każdy projekt na początku jest mały i tak naprawdę nie wiesz jak bardzo urośnie, więc wszystko konfiguruje się tak samo w mały i dużym projekcie😉 Co do zapanowania nad śmietnikiem, to tak jak ze wszystkim, trzeba cały czas pilnować porządku 😉 W trzecim odcinku będzie o tym jak tworzyć restapi i może tam będzie więcej na ten temat(jeszcze przygotowuję ten odcinek)
@@matdabski " i tak naprawdę nie wiesz jak bardzo urośnie" Tutaj akurat nie do końca się zgodzę, ale to już temat na osobny kurs pewnie i nie dla początkujących. Jeśli ktoś stosuję DDD, to powinien wiedzieć na przykład dzięki Event Storming jak bardzo duże będą te moduły, gdy się skończy programować. Oczywiście z czasem one delikatnie mogą się rozrosnać, ale to tylko w ramach swojego bounded contextu.
Ogólnie tak jak szybko przewijałem to się przyjemnie się patrzyło, dobra robota i flow. Zastanawiało mnie tylko, czy, aby na pewno to jest "wprowadznie" i odbiorca wie co to jest na przykład "Bean". Myślę, że przed tym można jeszcze podstawy bardziej omówić jako "wprowadzenie do kursu".
Pozdrawiam,
Kamil
Dzięki za komentarz. Szacowanie projektów to generalnie temat rzeka 😉 Teoretycznie da się określić jak mniej więcej będzie wyglądał projekt w fazie końcowej. Ale są różne projekty i często początkowe założenia rozjeżdżają się z tym co jest w końcowej fazie projektu...
Kurs będzie dotyczył raczej samego Sring Boota i tego jak napisać aplikację. Nie chciałem tu wykładać podstaw samego Springa itp. Musiałem przyjąć jaki zakres jestem w stanie zrealizować i trochę podstawy Springa mi nie pasowały.
Zmiana ustawień object mappera nie zadziała w ten sposób. Metoda customizeObjectMapper() nie jest wykonywana po starcie aplikacji. Object mapper pozostanie bez zmian.
Dzięki za komentarz. Masz rację, to tak nie zadziała. Czegoś tam brakuje, niestety nie jestem w stanie sobie przypomnieć, jak to chciałem zrealizować (w notatkach też niestety mam błędną wersję).
Podam więc tutaj kilka opcji na zrobienie tego:
1. Dokładnie tak jak jest to na filmie, tylko dodana adnotacja @PostConstruct nad metodą:
@Autowired
private ObjectMapper objectMapper;
@PostConstruct
void customizeObjectMapper() {
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
2. Object mapper można wstrzyknąć bezpośrednio do metody jako parametr:
@Autowired
void customizeObjectMapper(ObjectMapper objectMapper) {
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
3. Można stworzyć beana, który nadpisze domyślny object mapper:
@Bean
public ObjectMapper customizeObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return objectMapper;
}
mam pytanie baza na tej autokonfiguracji niestartuje bo niema pliku test w moim c:
Poszukaj w konsoli loga w stylu:
main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:650550fa-7e1b-4f8d-8fe7-1241406ed2fa'
Wklej to 'jdbc:.... ' w pole JDBC URL:
A może kiedyś wideo z wyświetlaniem danych z kilku serwisów pod jednym endpointem? Aktualnie walczę z czymś takim i ciężko coś znaleźć co by miało ręce i nogi
Patryk, tak naprawdę ciężko by było nagrać coś takiego, w sensie wymyślenie takiego przypadku byłoby ciężkie. Oczywiście na co dzień jest wiele takich sytuacji, ale przeniesienie tego na UA-cam, w taki sposób, żeby miało to jakąś wartość i żeby dało się to jakoś zrealizować, jest trudne. Ale pomyślę o tym, jest to jakieś wyzwanie, więc nie wykluczone, że się tym zajmę. Tylko na razie nie mam żadnego pomysłu, jak można byłoby coś takiego pokazać.
Jak coś to jestem otwarty na propozycje. Możesz opisać mi tutaj, twój problem, ewentualnie, możesz napisać prywatną wiadomość.
Groovy czy kotlin?
Oauth2, autoryzacja po stronie azure + aplikacja kliencka + resource serwer, jak debugowac napisana konfigurację
Cześć Kamil, dzięki za komentarz. Oauth2 może się niedługo pojawi. Azura nie mam w planach na razie. A ostatnie nie do końca rozumiem;) Chcesz debugować konfigurację aplikacji, czy samą aplikację, a może chodzi Ci bardziej o testowanie aplikacji?
@@matdabski debugowac konfigurację która pisze wykorzystując klasy javowe. Chciałbym np czasami wiedzieć czy po wywołanie jakiejś metody odpali się klasa x i metoda y żeby wiedzieć czy konfiguracja zrobi to co chce. Ciężko mi to wyjaśnia ;)
@@Valantir007 to do tego masz testy jednostkowe, które pozwalają sprawdzić kod na najniższym poziomie czy w danej metodzie dzieje się to, co ma się dziać. Jeśli chcesz, przetestować powiedzmy całą metodę restową, to potrzebne są testy integracyjne np. ze mockMvc. O testach jednostkowych mam nagrany cały kurs. Zajmuję się teraz jego aktualizacją i na dniach dodam dwie nowe części i jedna będzie właśnie dotyczyła odpalania testów z mockmvc.
Także zapraszam kursy.nullpointerexception.pl/mini-kurs-testy-jednostkowe-start/
Po dodaniu schema.sql oraz data.sql nadal nie mam tego odzwierciedlonego w bazie danych. Czy ktoś wie dlaczego ?
Może nie dodałeś odpowiednich propertiesów.
Jak nie masz danych z data.sql to spróbuj ustawić:
spring.jpa.hibernate.ddl-auto=none
W przypadku wersji intellij ultimate jest możliwość dodania nowych narzędzi springa przy już otwartym projekcie z perspektywy samego Intellija? Chodzi o to, czy jakaś opcja narzędzia oferuje nam dodawanie tych opcji tak jak przy tworzeniu projektu za pomocą spring initializr
Nie, nie ma takiej opcji. Możesz jedynie dodać zależności przy tworzeniu projektu.
@@matdabski Z informacji nie jestem szczęśliwy, ale dziękuję za super szybką odpowiedź!
@@KulfoneekPL możesz wyszukać sobie odpowiednie zależności na stronie initializera i korzystając z guzika Explore podejrzeć je i przekopiować do swojego projektu.
Po jakimś czasie aplikacja springoa zacząła mi się bardzo wolno odpalać, a nawet w ogóle przestała się uruchamiać. Tworzyłem ją na nowi w initializerze i za każdym razem zatrzymuje mi się przy kroku "Started RestapiApplication in 3.451 seconds (JVM running for 4.735)" i wtedy już nic się nie dzieje. Czy ktoś spotkał się z takim problemem?
To znaczy, że aplikacja wystartowała. Nic więcej nie będzie się dziać
Pytanie, czemu Grandle???
Odpowiedź znajdziesz tutaj ;) nullpointerexception.pl/dalczego-wole-gradle-od-mavena/
Czy w klasie z adnotacją @Config każda metoda zostanie uruchomiona? Nie trzeba dodawać żadnej adnotacji do metody?
Nie. Trzeba dodawać odpowiednie adnotacje w zależności od tego co chcesz zrobić. Zwykle klasa ta służy do definiowania odpowiednich beanów i wtedy używa się adnotacji @Bean
W takim razie do tej metody customizeObjectMapper chyba trzeba coś dołożyć? 15:45
@@arturgorecki5803 tak dokładnie ;) już ktoś kiedyś o to pytał. Wkleję więc tutaj to, co wcześniej napisałem:
Czegoś tam brakuje, niestety nie jestem w stanie sobie przypomnieć, jak to chciałem zrealizować (w notatkach też niestety mam błędną wersję).
Podam więc tutaj kilka opcji na zrobienie tego:
1. Dokładnie tak jak jest to na filmie, tylko dodana adnotacja @PostConstruct nad metodą:
@Autowired
private ObjectMapper objectMapper;
@PostConstruct
void customizeObjectMapper() {
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
2. Object mapper można wstrzyknąć bezpośrednio do metody jako parametr:
@Autowired
void customizeObjectMapper(ObjectMapper objectMapper) {
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
3. Można stworzyć beana, który nadpisze domyślny object mapper:
@Bean
public ObjectMapper customizeObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return objectMapper;
}
Dzięki za odpowiedź :)
@arturgorecki5832 jest jeszcze jedna metoda na to:
Logikę inicjalizacji można również umieścić w konstruktorze jeśli korzystamy z wstrzykiwania zależności przez konstruktor (od wersji 4.3), wtedy wystarczy taki konstruktor:
public Config(final ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
Nie wiem czy jest to "polecana metoda", nie mniej działa.
Witam, caly czas wyrzuca mi blad w skladni SQL.... Kopiuje od Ciebie z gita... Pisze tez, ze należy wybrać połączenie ( The file is not linked yo any Connection)... Potrafiłbyś mi pomóc? Wszytsko mam tak jak Ty do tego momentu... Moze musze coś dodatkowo zainstalować?
Cześć, błąd w składni to może być cokolwiek, np. brakuje gdzieś spacji (w logu powinieneś mieć pokazane miejsce, gdzie jest błąd). Co do połączenia to nie wiem, o co chodzi. W komunikacie o błędzie (stacktrace) powinien być taki fragment (a nawet czasem jest kilka) "Caused by:" - tam znajdziesz przyczynę błędu. Możesz też tutaj wkleić ten komunikat, to może coś pomogę ;)
@@matdabski
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker': Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of URL [file:/C:/Users/Mateusz-PC/Desktop/LearnAPI2/LearnAPI2/build/resources/main/schema.sql]: CREATE TABLE POST ( id BIGINT PRIMARY KEY AUTO_INCREMENT , title VARCHAR(400) NOT NULL, contentsd VARCHAR(2000) NULL, ); nested exception is org.h2.jdbc.JdbcSQLException: Blad skladniowy w wyrazeniu SQL CREATE TABLE POST ( ID BIGINT PRIMARY KEY AUTO_INCREMENT[*] , TITLE VARCHAR(400) NOT NULL, CONTENTSD VARCHAR(2000) NULL, ) ; oczekiwano )
Syntax error in SQL statement CREATE TABLE POST ( ID BIGINT PRIMARY KEY AUTO_INCREMENT[*] , TITLE VARCHAR(400) NOT NULL, CONTENTSD VARCHAR(2000) NULL, ) ; expected ); SQL statement:
CREATE TABLE POST ( id BIGINT PRIMARY KEY AUTO_INCREMENT , title VARCHAR(400) NOT NULL, contentsd VARCHAR(2000) NULL, ) [42001-60]
@@mateuszkaleta1495 , ) ; expected ); - przed nawiasem nie powinno być przecinka
@@matdabski bardzo dziekuję, że wgl Pan odpowiada i chce Pan pomóc :) ale błąd występuje nadal, dziwne bo nawet po skopiowaniu kwerendy z innego działającego programu, pokazuje błąd składni
Caused by: org.h2.jdbc.JdbcSQLException: Blad skladniowy w wyrazeniu SQL CREATE TABLE POST ( ID BIGINT PRIMARY KEY AUTO_INCREMENT[*] , TITLE VARCHAR(400) NOT NULL, CONTENTSD VARCHAR(2000) NULL ) ; oczekiwano )
Syntax error in SQL statement CREATE TABLE POST ( ID BIGINT PRIMARY KEY AUTO_INCREMENT[*] , TITLE VARCHAR(400) NOT NULL, CONTENTSD VARCHAR(2000) NULL ) ; expected ); SQL statement:
CREATE TABLE POST ( id BIGINT PRIMARY KEY AUTO_INCREMENT , title VARCHAR(400) NOT NULL, contentsd VARCHAR(2000) NULL ) [42001-60]
@@matdabski dodam, że kopiuję bezpośrednio od Pana oraz ze strony PostgreSQL i nie działa w obu wypadkach ;/
w którym momencie wybiera Pan rodzaj bazy danych ?:)
W kursie jest tak, że w odcinkach 1-9 jest baza H2, a od 10-tego odcinka jest MYSQL. O wyborze bazy w Spring Boot decyduje zależność do sterownika danej bazy (dodana w build.gradle)
@@matdabski rozumiem, czy w takim razie istnieje jakieś wytłumaczenie na to, dlaczego nie chce mi utworzyć tabeli w jakimkolwiek języku? ciągle wyrzuca błąd... tak samo jak koledze drugiemu ;/
@@mateuszkaleta1495 niestety wytłumaczenie prawdopodobnie jest takie, że popełniasz gdzieś błąd. I nie piszę tego złośliwie, tak zwykle jest, że programista popełnia błąd i coś nie działa. Narzędzia działają w określony sposób i to Ty musisz się do nich przystosować, a nie one do Ciebie. Czytaj komunikaty błędów, tam jest odpowiedź na twoje pytanie. Na razie tylko Wy mieliście takie problemy, więc są możliwe dwa scenariusze: 1. Coś zmieniło się we frameworku (i gdy pobraliście nową wersję ze strony springa, nie chce to działać z moim kodem) - na razie wydaje mi się, że raczej to nie jest ta opcja. 2. To przypadek, że macie "podobne" błędy. W cudzysłowie podobne, bo tak naprawdę nie wiem jakie maci błędy. Na razie widziałem same literówki, więc nie traktuję tego jak błąd. Czytaj komunikaty błędów, jak nie wiesz co one oznaczają to spróbuje je wygooglować, wiele błędów jest już opisanych w sieci, więc można znaleźć rozwiązania szukając ich w google.
@@matdabski problem się wyjaśnił. Wersja comunnity nie obsługuje sql. Trzeba tworzyć tabele bezpośrednio w h2. Inserty odziwo działają 0,o
@@matdabski ale chyba nie będzie problemu jesli nie będę korzystał z file.sql tylko bezpośrednio w h2 ?
JAK DODAC TEGO URL DO DATASORCE?? NIE MOGE POLACZYC SIE Z TA BAZA DANCH
w pliku z propertiesami github.com/matdabrowski/SpringBootTutorialUA-cam/blob/master/src/main/resources/application.properties
dodaj
spring.datasource.url=jdbc:h2:mem:testdb
@@matdabski resource--->aplication.propertis?? w nim dodac?
@@miszelllina tak
@@matdabski zrobilam tak i dalej ten sam blad ...
@@miszelllina nie napisałaś jaki błąd. W klej komunikat, bo może rozwiązujemy nie ten problem
A jak to zrobić jeśli ma się MS SQL bazy danych lokalnie zainstalowany server? :)
To nadal możesz korzystać z H2. A jak się bardzo upierasz przy Mssql to w apllication.properties musisz dodać odpowiednie propertiesy, które pozwolą Ci połączyć się z tą bazą i do tego musisz zamienić driver H2 na driver do mssqla (w build.gradle). Wszystko znajdziesz w google.
Jak na pierwszy odcinek to trochę szybkie tempo nauki narzucone
Ja się nie zgadzam, jak dla mnie wszystko ok
Było by super gdybyś stworzył materiał dotyczący cache w springu :D
Dzięki za komentarz, postaram się coś przygotować 😉
@@matdabski Nie mogę się doczekać ^^
witam. a mi wyskoczyły takie błędy i w sumie wymiękłem, w desperacji (lub moje moje skromnej pomysłowości i zabawy plugnach) odinstalowałem inteliJ, z góry dzięki za pomoc
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker': Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of URL [file:/D:/programowanie/moje.demo/build/resources/main/schema.sql]: CREATE TABLE POST ( id BIGINT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(400) NOT NULL, content VARCHAR(2000) NULL, ); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: B��d sk�adniowy w wyra�eniu SQL "CREATE TABLE POST ( ID BIGINT AUTO_INCREMENT PRIMARY KEY, TITLE VARCHAR(400) NOT NULL, CONTENT VARCHAR(2000) NULL, )[*]"; oczekiwano "identifier"
Cześć, jak wyskakują Ci takie błędy to wystarczy wkleić fragment, który zaczyna się od "Caused by" np.
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: B��d sk�adniowy w wyra�eniu SQL "CREATE TABLE POST ( ID BIGINT AUTO_INCREMENT PRIMARY KEY, TITLE VARCHAR(400) NOT NULL, CONTENT VARCHAR(2000) NULL, )[*]"; oczekiwano "identifier"
Masz błąd składniowy w sqlu. Zrobiłeś mały błąd na samym końcu VARCHAR(2000) NULL, )
@@matdabski poprawione dzieki wielkie :D
@@ajanuszkiewicz ;)
Przy testowaniu połączenia do bazy h2 otrzymuję: Database "C:/Users/..." not found, either pre-create it or allow remote database creation (not recommended in secure environments). Czyli nie tworzy się automatycznie... Za materiał i tak masz łapkę w górę :)
Już ktoś pisał o tym pod tym filmem. Spróbuj dodać urla dla datasource: spring.datasource.url=jdbc:h2:mem:testdb
OAuth2
Zanotowane 😉
Czy komuś również wyskakuje błąd "Error: Could not find or load main class org.gradle.launcher.daemon.bootstrap.GradleDaemon"???
Się nie da