Parsowanie Stringa na Enuma i obsługa wyjątków

0

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).

2
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.

0

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.

1

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.

1

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.

1

@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)?

1 użytkowników online, w tym zalogowanych: 0, gości: 1