Estoy investigando un enfoque basado en anotaciones para validar Spring beans usando spring modules. En this tutorial, los de frijol siguientes (captadores y definidores omitidos) se utiliza como un ejemplo:basado en anotación Spring bean validation
public final class User {
@NotBlank
@Length(max = 80)
private String name;
@NotBlank
@Email
@Length(max = 80)
private String email;
@NotBlank
@Length(max = 4000)
private String text;
}
El mensaje de error que se utiliza si se desobedece una regla de validación particular, debe seguir el siguiente formato:
bean-class.bean-propery[validation-rule]=Validation Error message
Ejemplos de la clase mostrada anteriormente incluyen:
User.email[not.blank]=Please enter your e-mail address.
User.email[email]=Please enter a valid e-mail address.
User.email[length]=Please enter no more than {2} characters.
el hecho de que las claves de mensajes contienen el nombre de la clase presenta un par de problemas:
- Si se cambia el nombre de la clase, las claves de mensaje también necesita ser cambiado
Si tengo otra clase (por ejemplo, Persona) con una propiedad de correo electrónico validada de manera idéntica a User.email. Necesito duplicar los mensajes, p.
Person.email [not.blank] = Por favor, introduzca su dirección de correo electrónico.
Person.email [email] = Ingrese una dirección de correo electrónico válida.
Person.email [length] = Ingrese no más de {2} caracteres.
De hecho, las demandas de documentación que es posible configurar un mensaje predeterminado para una regla particular (por ejemplo @email) así:
email=email address is invalid
Este mensaje predeterminado se debe utilizar si un Bean- mensaje específico para la regla no se puede encontrar. Sin embargo, mi experiencia es que esto simplemente no funciona.
Un mecanismo alternativo para evitar mensajes duplicados es pasar la clave del mensaje de error a la anotación de la regla. Por ejemplo, supongamos que he definido el siguiente mensaje de error por defecto para la regla @email
badEmail=Email address is invalid
Este mensaje debe ser utilizado si anoto la propiedad relevante de esta manera:
@Email(errorCode="badEmail")
private String email;
Sin embargo yo probamos este, una y otra vez, simplemente no parece funcionar. ¿Alguien ha encontrado una forma de evitar la duplicación de mensajes de error cuando se utiliza este marco de validación?
En la configuración de Spring que se muestra arriba, ¿qué es el bean configurationLoader? –
Hola, Don: descargué el código fuente del sitio web del tutorial que mencionaste, y configurationLoader ya es uno de los beans definidos en su config xml. Cuando llego a casa y miro el código que escribí, puedo actualizar esta publicación. – toolkit
El bean configurationLoader del tutorial es de tipo org.springmodules.validation.bean.conf.loader.annotation.AnnotationBeanValidationConfigurationLoader – toolkit