• 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

Aruba Cloud - Virtual Private Server VPS
0 głosów
379 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 (280,450 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,260 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,260 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,260 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,260 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 696 wizyt
pytanie zadane 8 czerwca 2020 w Java przez keyhha Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 138 wizyt
pytanie zadane 17 czerwca 2017 w Java przez Jonki Dyskutant (8,180 p.)
0 głosów
1 odpowiedź 164 wizyt

93,324 zapytań

142,323 odpowiedzi

322,390 komentarzy

62,653 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...