filtry artykuł logo
Filtry w aplikacjach webowych
15 kwietnia 2017
Kontekst serwletu i obiekty nasłuchujące w aplikacjach webowych
21 kwietnia 2017
stacja pogodowa logo

Kolejny raport z frontu Pogodynki. Tym razem krótko, w kilku żołnierskich słowach opiszę o postępy w Pogodynce.

Zabawa z JSONem

Nie mogę powiedzieć, że zrobiłem to “w tym tygodniu”. Nad pogodynką pracowałem wyłącznie dzisiaj :). Pierwszym problemem, który musiałem rozwiązać była serializacja i deserializacja obiektów klasy DateTime z biblioteki Joda.

Okazuje się, że biblioteka Gson, którą wybrałem domyślnie robi to w “dziwaczny sposób”. Jako proste i przejrzyste rozwiązanie zaimplementowałem swój własny konwerter DateTime -> String -> DateTime. Data przekazywana jest jako łańcuch znaków zapisany w formacie ISO8601.

Na tym etapie funkcjonalność testowałem wyłącznie z linii poleceń używając programu curl. Przykładowe zapytanie, które wysyła pomiar temperatury do komponentu Data Vault może wyglądać następująco:

W wyniku widzimy “piękną” odpowiedź w formacie JSON. Oczywiście sama temperatura jeszcze się nigdzie nie zapisuje – nie podłączyłem do tego bazy danych. Zajmę się tym w najbliższym tygodniu.

Cała konwersja możliwa jest dzięki klasie CustomDateTimeAdapter. Następnie do automatycznego mechanizmu konwersji Springa dodaję to właśnie rozszerzenie. Dzięki takiej konfiguracji obiekty zawierające instancję DateTime poprawnie tworzone są na podstawie zapytań zawierających dane w formacie JSON.

Walidacja danych wejściowych

Nie można ufać użytkownikom. Nawet jeśli jedynym użytkownikiem w trym przypadku jest aplikacja, którą ja napisałem. Zakrawa to trochę o schizofrenię, ale takie są “dobre praktyki” pisania aplikacji. Dane wejściowe trzeba walidować, koniec i kropka.

Specyfikacja Bean Validation 1.0 doczekała się swojego następcy Bean Validation 1.1 i Bean Validation 2.0. Na dzień dzisiejszy wersja 1.1 jest “obowiązującą”. Jako implementację walidatora wybrałem Hibernate.

Proste dołączenie biblioteki w pliku datavault.gradle wraz z użyciem adnotacji @NotNull i @Valid pokazuje siłę Springa:

Kontroler – serce aplikacji

Ta aplikacja to w praktyce jeden kontroller. Dodatkowo aplikacja zawiera drobną konfigurację rozszerzającą domyślne ustawienia.

Podsumowanie

Czasu już dużo nie zostało. Teraz zamierzam pracować nad pogodynką także w tygodniu, nie tylko w weekendy jak do tej pory. Trzymajcie za mnie kciuki 😉

Zdjęcie dzięki uprzejmości https://www.flickr.com/photos/littlekoshka/4647737233/sizes/l