• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Walidacja pola double w encji za pomocą Hibernate validator

Object Storage Arubacloud
0 głosów
228 wizyt
pytanie zadane 11 lipca 2020 w Java przez mibdbz Gaduła (4,300 p.)
Cześć.

Mam problem z walidacją pola double za pomocą Hibernate Validator. Żadne @notnull czy @Min nie działa. Próbowałem zrobić swoją własną adnotację za pomocą ConstraintValidator ale poległem. Czytałem, że trzeba zamienić double na bigdecimal, ale wtedy encja nie zmapuje się do bazy danych.

Rozwiązania, które widzę że mogą się udać to:

1. Zmiana w bazie danych

2. Jakas klasa pomocnicza z encją pośrednią zawierająca bigdecimal, którą potem zmienię tak aby dawała na wyjściu double

Macie jakieś inne rozwiązanie?

2 odpowiedzi

0 głosów
odpowiedź 11 lipca 2020 przez Wiciorny Ekspert (270,110 p.)
edycja 11 lipca 2020 przez Wiciorny

Long próbowałeś, dlaczego stosujesz typ double? Generalnie powinien to być Integer/BD albo Long, szczególnie Long dla indeksów https://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/getstart/mapping.html 


bigdecimal, ale wtedy encja nie zmapuje się do bazy danych.

dlaczego  ma się nie mapować?
Co konkretnie chcesz validować, bo nie bardzo rozumiem.  

komentarz 12 lipca 2020 przez mibdbz Gaduła (4,300 p.)
Użytkownik wpisuje ilość węglowodanów z opakowania w formatkę na stronie jsp. Liczba dziesiętna jest ważna ponieważ w późniejszym etapie służy do obliczania wymienników węglowodanowych z określoną precyzją. Tak samo jest dla innych składników odżywczych.
0 głosów
odpowiedź 11 lipca 2020 przez mbabane Szeryf (79,280 p.)

Jeśli jest tzw. mały double to @NotNull nie ma sensu.

Napisz też co dla Ciebie znaczy nie działa. @Min nie działa dla double: https://docs.oracle.com/javaee/7/api/javax/validation/constraints/Min.html

Ogólnie jest tam też notka, że dla double'a czy float'a nie ma wsparcia, ponieważ mógłby być problem z zaokrąglaniem oraz są tam wartości NaN i nieskończoność co także sprawiać może duże problemy. Musisz użyć BigDecimala, wtedy @Min Ci zadziała.

 

komentarz 12 lipca 2020 przez mibdbz Gaduła (4,300 p.)
Nie działa znaczy nie walidjje pola. Chcę aby wartość zawierała się między 0.0 a 1000.0. Wpisuje mniejsza przy @Min i nic się nie dzieje. Nie wyświetla komunikatu o błędzie ale nie przechodzi dalej. Tak samo z większą niż 1000 przy @Max. @notnull także nic.
komentarz 12 lipca 2020 przez mbabane Szeryf (79,280 p.)

Patrząc jeszcze na inny Twoj komentarz zakladam ze nie dziala walidacja na poziomie reuesta http. Sprawdź adnotację @Valid. Musisz ją umiescić na argumencie metody w kontrolerze.

public String method(@Valid Object request).

Pamietaj tez zeby nie uzywac doubla.

Polecam tez wpisac w google java valaldation jsp

komentarz 12 lipca 2020 przez mibdbz Gaduła (4,300 p.)
Mam ją umieszczoną. Będę próbował z tym BigDecimal. Jak skończę apkę to pochwalę się i poproszę w osobnym poście o codereview. Choć może to jeszcze trochę zająć. Dzięki za odpowiedzi. Jak by jeszcze coś wpadło do głowy to piszcie.
komentarz 12 lipca 2020 przez mbabane Szeryf (79,280 p.)

Dziwne podejście, daje Ci link do javadoca z @Min, dodatkowo wyjaśniam, że jest tam opisane, że dla double/float nie ma wsparcia, a Ty dalej coś kombinujesz z tym, tak jakby BigDecimal to był nie wiadomo co.

komentarz 12 lipca 2020 przez mibdbz Gaduła (4,300 p.)
Teraz ja nie rozumiem. W pierwszej odpowiedzi piszesz, żebym użył bigdecimal, a jak teraz piszę, że będę to robił to mówisz, że to dziwne podejście.
komentarz 12 lipca 2020 przez mbabane Szeryf (79,280 p.)
Chodziło mi o to, że mimo, że podałem Ci, że double z Min nie działa i żebyś zastosował BigDecimal (w pierwszej odwiedzi i to z linkami do dokumentacji na potwierdzenie, zajrzałeś w ogóle tam?) to Ty dalej próbowałeś używać double i dopiero na drugą odpowiedź zareagowałeś, że użyjesz BigDecimala - tak jakbyś zignorował całkowicie To co napisałem w odpowiedzi.
komentarz 12 lipca 2020 przez mibdbz Gaduła (4,300 p.)
To, że double z @Min nie działa zdołałem odkryć sam. Stąd ten post. To że rozwiązaniem może być bigdecimal też przeczytałem, już przed postem. I kto powiedział, że dalej próbowałem używać double? Napisałem przecież, że spróbuje z bigdecimal. Nie siedzę przy kompie 24 godziny na dobę i nawet nie codziennie. Pytałem się o to czy są jeszcze jakieś inne rozwiązania.

Podobne pytania

0 głosów
2 odpowiedzi 451 wizyt
pytanie zadane 8 czerwca 2020 w Java przez keyhha Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 123 wizyt
pytanie zadane 17 czerwca 2017 w Java przez Jonki Dyskutant (8,180 p.)
0 głosów
1 odpowiedź 129 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...