2011-01-14 10 views
7

Mam aplikację Java EE i chcę zweryfikować datę. sznurkiem zrobić to:JSR 303 - javax.validation - Zweryfikuj datę

import javax.validation.constraints.NotNull; 
import javax.validation.constraints.Size; 
... 
@NotNull 
@Size(min = 1, max = 255) 
private String myString; 

Ale teraz mam dwie daty, które chcę, aby potwierdzić. Użytkownik może w systemie frontend napisać String w polu tekstowym, które zostanie przesłane przez JSON (muszę użyć pola tekstowego, nie mogę użyć datepika).

Więc moje backend ma to w moim klasy domeny:

@DateTimeFormat(pattern = "dd.MM.yy") 
@Temporal(value=TemporalType.TIMESTAMP) 
private Date myStartDate; 

@DateTimeFormat(pattern = "dd.MM.yy") 
@Temporal(value=TemporalType.TIMESTAMP) 
private Date myEndDate; 

Chcę sprawdzić poprawność przeciwko formacie „dd.mm.rrrr”. Jak to zrobić?

I, nie sądzę, ale czy istnieje automatyczna walidacja, aby sprawdzić, czy data rozpoczęcia jest przed datą końcową? Znalazłem tylko @Future i @Past.

A więc jedynym rozwiązaniem jest użycie @Pattern, wyrażenia regularnego ?!

Z góry dziękuję za pomoc, Pozdrawiam.

+2

Kilka rzeczy: '@ DateTimeFormat' nie jest częścią JSR-303, a' mm' oznacza minuty, a nie miesiące. W jaki sposób zmienianie '' dd.MM.yy "' na '" dd.MM.yyyy "' nie działa? Ponieważ wydaje się, że używasz Spring MVC (do którego należy ta adnotacja), możesz poprawić/retagować swoje pytanie. Przynajmniej JSR 303 nie oferuje adnotacji [any] (http://download.oracle.com/javaee/6/api/javax/validation/constraints/package-summary.html). – BalusC

+0

Tak, mogę zmienić na "dd.MM.rrrr", ale nie ma sprawdzania poprawności. – Tim

+0

Nie rozumiem także, w jaki sposób sprawdzanie poprawności wzorca jest użyteczne w 'Dacie' zamiast' String', ponieważ 'Date' nie przechowuje żadnych informacji o jego wewnętrznym formacie. Tak czy inaczej, nie robię Springa, ale myślę, że wystarczy zaimplementować [Validator] (http://static.springsource.org/spring/docs/3.0.x/reference/validation.html). Tak przynajmniej zrobiłbym, gdyby to był JSF. – BalusC

Odpowiedz

3

@DateTimeFormat jest używany podczas wiązania danych sieciowych podczas odwzorowywania parametrów żądania na obiekt (zakładając, że został on włączony z <mvc:annotation-driven/> lub ręcznie). Zazwyczaj nie będzie używane podczas przekształcania JSON w obiekt. Jak czytasz w swoim JSON? Czego używasz do deserializacji? Nie można sprawdzić poprawności obiektu Date w Javie po fakcie formatowania, należy sprawdzić przed wprowadzeniem deserializacji.

Nie ma wbudowanych ograniczeń wieloblokowych. Będziesz chciał napisać własne ograniczenie poziomu, jeśli chcesz porównać dwie właściwości obiektu.

+0

Dziękuję za odpowiedź. Chcę sprawdzić to za pomocą '@Pattern (regexp =" \ t (0 [1-9] | [12] [0-9] | 3 [01]) [- /.] (0 [1-9] | 1 [012]) [- /.] (19 | 20) \ d \ d \ t ")', ale jest błąd, że jest to niepoprawna sekwencja escape.Tak, mogę to sprawdzić przed wysłaniem do systemu zaplecza, ale nie mam dostępu do frontendu system, jestem tylko "mistrzem backendu" i muszę sprawdzić, czy format daty jest w porządku, więc wzorzec będzie wystarczający w pierwszym kroku: – Tim

+0

musisz podwoić wszystkie \\ w regex java, ponieważ \ jest już znak escape dla ciągów java, zanim przejdzie do silnika regex. – Affe

Powiązane problemy