validaciones valid requestmapping puede para método mvc formulario example escritura encontrar ejemplo commandname atributo arquitectura java validation spring-mvc

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.