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

Parsowanie Stringa na Enuma i obsługa wyjątków
SA
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • 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
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10074
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:około 17 lat
  • Ostatnio:dzień
  • Postów:1875
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.


”Engineering is easy. People are hard.” Bill Coughran
edytowany 1x, ostatnio: Charles_Ray
LU
  • Rejestracja:ponad 11 lat
  • Ostatnio:4 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:ponad 12 lat
  • Ostatnio:około 6 godzin
  • Postów:3584
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.

LU
Akurat jackson odziwo nie wywołuje valueof. Wczoraj złapałem się tam debuggerem i nie wbijał tam.
.andy
  • Rejestracja:ponad 16 lat
  • Ostatnio:około 3 lata
  • 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)?


Software is like sex: it's better when it's free.
- Linus Torvalds

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.