java - requestmapping - spring validation example
Java/Spring MVC 3 validación de una dirección de correo electrónico (4)
Tengo un backend de Java con Spring MVC y estoy usando la validación de esta manera en mi objeto de dominio para una dirección de correo electrónico:
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
...
@NotNull
@Size(min = 1, max = 100)
@Pattern(regexp="^([a-zA-Z0-9//-//.//_]+)''+''(//@)([a-zA-Z0-9//-//.]+)''+''(//.)([a-zA-Z]{2,4})$")
private String email;
Pero todo lo que consigo con estas líneas de código.
Set<ConstraintViolation<Person>> failures = validator.validate(personObject);
...
Map<String, String> failureMessages = new HashMap<String, String>();
for (ConstraintViolation<Person> failure : failures) {
failureMessages.put(failure.getPropertyPath().toString(), failure.getMessage());
System.out.println(failure.getPropertyPath().toString()+" - "+failure.getMessage())
}
Consigo esto en la consola:
email - must match "^([a-zA-Z0-9//-//.//_]+)''+''(//@)([a-zA-Z0-9//-//.]+)''+''(//.)([a-zA-Z]{2,4})$"
pero tengo como dirección de correo electrónico [email protected]
, por lo que la [email protected]
no coincide.
Así que tengo dos prolems:
- ¿Qué está mal aquí?
- ¿Y cómo puedo definir un mensaje de error por mi cuenta, porque mostrar esto al usuario, eso no es algo bueno :-)
Gracias de antemano por su ayuda y saludos cordiales.
Primero intente expresiones regulares más simples como esta:
"//b[A-Z0-9._%+-]+@[A-Z0-9.-]+//.[A-Z]{2,4}//b"
Entonces puedes probar la versión RFC 2822:
"(?:[a-z0-9!#$%&''*+/=?^_`{|}~-]+(?://.[a-z0-9!#$%&''*+/=?^_`{|}~-]+)*|/"(?:[//x01-//x08//x0b//x0c//x0e-//x1f//x21//x23-//x5b//x5d-//x7f]|////[//x01-//x09//x0b//x0c//x0e-//x7f])*/")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?//.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|//[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)//.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[//x01-//x08//x0b//x0c//x0e-//x1f//x21-//x5a//x53-//x7f]|////[//x01-//x09//x0b//x0c//x0e-//x7f])+)//])"
Hazme saber si el trabajo te funcionó.
También mira este paquete
org.springmodules.validation.bean.conf.loader.annotation.handler
aquí
http://www.springbyexample.org/examples/spring-modules-validation-module.html
Podría ser mejor alternativa.
Puedes usar @Email
desde Hibernate Validator :
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
Si usa Hibernate Validator , puede usar @Email nototation. De todos modos, puede crear su anotación personalizada contraint y configurar un mensaje personalizado para mostrar en su archivo de propiedades de recursos.
Su expresión regular tiene un par de instancias de ''+''
, lo cual es un poco extraño. las direcciones de correo electrónico no suelen tener comillas simples :) Creo que quizás se trate de concatenar partes de la cadena, ¿y esas deben ser comillas dobles?
Para definir su propio mensaje, simplemente agregue message="{someWay.of.definingCodes}"
a la anotación. Luego defina una traducción para ella en ValidationMessages.properties
en el paquete predeterminado.
Como alternativa, el validador de hibernación proporciona org.hibernate.validator.Email
si está dispuesto a depender de una extensión de proveedor.