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

Parsowanie Stringa na Enuma i obsługa wyjątków
SA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 94
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).

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
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.

Charles_Ray
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1910
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.

LU
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gdańsk
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.

W0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3758
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.

.andy
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1524
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)?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.