2011-01-14 93 views
7

Tengo una aplicación Java EE y deseo validar una fecha. con una cadena que hacer esto:JSR 303 - javax.validation - Validar una fecha

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

Pero ahora tengo dos fechas la que desea validar. El usuario puede en el sistema frontend escribir una cadena en un campo de texto que se transferirá a través de JSON (tengo que usar el campo de texto, no puedo usar un marcador de fecha).

Así que mi backend tiene esto en mi clase de dominio:

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

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

Quiero validar contra el "dd.MM.yyyy" formato. ¿Cómo puede hacerse esto?

Y, no lo creo, pero ¿hay una validación automática para verificar si la fecha de inicio es anterior a la fecha de finalización? Solo encontré @Future y @Past.

Entonces la única solución es usar un @Pattern, una expresión regular ?!

Gracias de antemano por su ayuda, Saludos cordiales.

+2

Un par de cosas: el '@ DateTimeFormat' no es parte de JSR-303 y' mm' significa minutos, no meses. Además, ¿cómo falla el cambio '' dd.MM.yy "' to '" dd.MM.aaaa "'? Dado que parece que está utilizando Spring MVC (de lo que esta anotación forma parte), es posible que desee revisar/volver a seleccionar su pregunta. Al menos, JSR 303 no ofrece [ninguna] (http://download.oracle.com/javaee/6/api/javax/validation/constraints/package-summary.html) anotaciones para esto. – BalusC

+0

Sí, puedo cambiar a 'dd.MM.aaaa', pero no hay validación. – Tim

+0

Tampoco entiendo cómo la validación de patrón es útil en una 'Fecha' en lugar de' Cadena' ya que 'Fecha' no almacena ninguna información sobre su formato interno. De todos modos, yo no uso Spring, pero creo que solo necesitas implementar un [Validator] (http://static.springsource.org/spring/docs/3.0.x/reference/validation.html). Así es al menos cómo lo haría si fuera JSF. – BalusC

Respuesta

3

@DateTimeFormat se utiliza durante el enlace de datos web, al mapear parámetros de solicitud en un objeto (suponiendo que lo haya habilitado con <mvc:annotation-driven/> o manualmente). Generalmente no se utilizará al deserializar JSON en un objeto. ¿Cómo estás leyendo en tu JSON? ¿Qué estás usando para deserializarlo? No puede validar un objeto Date de java después del hecho para el formateo, debe verificar el frente antes de la deserialización.

No hay restricciones de campo múltiple integradas. Querrá escribir su propia restricción de nivel de tipo si desea comparar dos propiedades en un objeto.

+0

Gracias por su respuesta. Quiero validarlo con '@Pattern (regexp =" \ t (0 [1-9] | [12] [0-9] | 3 [01]) [- /.] (0 [1-9] | 1 [012]) [- /.] (19 | 20) \ d \ d \ t ")', pero hay un error que indica que se trata de una secuencia de escape no válida. Sí, puedo verificarlo antes de enviarlo al sistema back-end, pero no tengo acceso a la interfaz sistema, solo soy el "maestro de backend" y tengo que verificar si el formato de fecha es correcto, entonces el Patrón será suficiente en el primer paso. – Tim

+0

debes duplicar todo lo que quieras \\ en una expresión java, ya que \ ya está el carácter de escape para cadenas java, antes de que vaya al motor de expresiones regulares. – Affe

Cuestiones relacionadas