W jaki sposób wygodnie parsować Stringa przychodzącego np. Jsonem na Enuma? Najbardziej łopatologiczny sposób to SomeEnum.valueOf(Some String) i try catche, ale myślę, że istnieją jakieś bardziej cywilizowane sposoby. A może w ogóle to zignorować, bo to sprawa frontu, żeby użytkownikowi udostępnił tylko konkretne wartości np. w postaci jakieś rozwijanej listy z enumami? (Np. status - udone,done).
Sampeteq napisał(a):
W jaki sposób wygodnie parsować Stringa przychodzącego np. Jsonem na Enuma? Najbardziej łopatologiczny sposób to SomeEnum.valueOf(Some String) i try catche, ale myślę, że istnieją jakieś bardziej cywilizowane sposoby.
Istnieje specjalna metoda, to tego i nazywa sie właśnie valueOf()
. Nie ma tym nic niecywilizowanego, chyba że chodzi Ci o to, że info o tym że takiej wartości nie ma jako wyjątek, ale to jest dlatego że tell, don't ask.
A może w ogóle to zignorować, bo to sprawa frontu, żeby użytkownikowi udostępnił tylko konkretne wartości np. w postaci jakieś rozwijanej listy z enumami? (Np. status - udone,done).
Front, czy nie front; tak czy tak na backendzie musisz obsłużyć, co się ma stać kiedy użytkownik wyśle wartość niezgodną z interfejsem.
valueOf
jest spoko, natomiast jesli jest mozliwosc, że przyjdzie niespodziewana wartość, to aplikacja powinna rzucic jakis IllegalArgumentException
, ktory wskazuje na zlamanie kontraktu przez klienta.
EDIT: sprawdzilem, że tak dziala ta metoda, wiec pozostaje obsluzenie tego, np. zwrocenie HTTP 400/422 do frontu.
Zawsze możesz napisać w swoim enumie metodę statyczną, która zwraca Optional
jeżeli nie chcesz wyjątków.
Jak korzystasz z jacksona do deserializacji on rzuci JsonMappingException
.
Pytanie z jakiej biblioteki korzystasz - większość z nich jest na tyle sprytna, że przy próbie deserializacji do enuma sama załapie, żeby użyć valueOf
.
Jeśli robisz to ręcznie to czasem przydaje się jakaś metoda statyczna w stylu Option<MyEnum> findByName(String name)
lub Option<MyEnum> findByProperty(Integer propertyValue)
itp. itd. W praktyce dużo zależy od twojego przypadku użycia.
@Sampeteq:
W jaki sposób wygodnie parsować Stringa przychodzącego np. Jsonem na Enuma?
Po co?
Jaki problem chcesz rozwiązać? Co masz konkretnie zrobić (nie jak ale co)?