Jakie jest najlepszy sposób na sprawdzanie czy dane przesłane przez użytkownika są nullami? Np. przychodzi z kontrolera request RegisterUserRequest z polami username i password. Wiem, że najbardziej prymitywny sposób to sprawdzanie każdego parametru ifami, ale przy dużej ilości requestów i pól może być to uciążliwie. Chciałbym zwracać Eithery typu Either.left(new NullValue(...) z wiadomością "Null value: " i tutaj nazwa wartości, tylko raz, że to sporo pisania i nie wiem jak się dobrać sensownie do nazw pól. Z tego co czytałem, to najlepiej sobie z tym radzi javax validation, bo wtedy wystarczy dać nad polem @NotNull(message), ale tak jak napisałem, chciałbym zostać przy Eithera i unikać magii.
Jeżeli chodzi o nulle ja bym użył javax.validation NotNull / NotBlank. Tak jest po prostu najszybciej. Jeżeli wystawiasz jakieś api, którego kontrakt mówi, że jakieś pola nie mogą być nullami to to, że ktoś przekazał nulla w requescie wgl nie powinno mieć miejsca taki błędny request nie powinnien być wgl wysłany a jeżeli jest tzn, że źle zintegrowano się z tym api dlatego też moim zdaniem Either nie ma tu racji bytu.
eithery raczej do logiki biznesowej, a walidacja inputu to wspomniane wcześniej javax.validation, nie ma co przekombinowywać.
A wystarczyło użyć ludzkiego języka Kotlin i już.
Jest taka całkiem popularna biblioteka https://beanvalidation.org/ , możesz jej użyć do walidacji
Dzięki wszystkim. Będę używać javax validation i @NotNull.
Nie korzystaj z javax wszedzie. .
Warstwa walidacji leksyklanej/technicznej ktora stosujesz to pattern by badac DTO'sy w obecnej wersji API. Nie polecam stosować tego na bazie. Czemu? Baza zyje dlugo, moze sa pola ktore kiedys były nullami itd.
Eithery sa gdy chcesz uzywac podzialu w logice biznesowej. Czasem null jest wartością biznesową (antypattern) i informuje nas o czymś, niesie entropie, wiec zwróc uwagę na to.
Natomiast do przetwarzania potencjalnych nulli w serwisach dedykowany jest optional, unikasz arrow-pattern, a odpowedzialność za NPE jest zwalana na mityczną monadę.
User nie da rady Ci wysłać null
, bo null
to jest element języka. User najwyżej Ci może wysłać bajty albo String
.
To o czym mówisz, to być może to że biblioteka lub framework z którego korzystasz parsuje pewne dane w taki sposób że daje Ci null
.