Problema de Validacion de Email con javax.validation.constraints

En este aprendizaje para aplicar SmartWork a las validaciones de atributos en los puntos de entrada al sistema con Java, me encontré con un problema de validacion de formato de Email.

Luego de pasar Staging, el equipo de testing reporta un error de validacion de formato en el campo «email». El caso indica que al mandar por ejemplo «[email protected]» omitiendo el .com se encuentran con que el back end lo considera valido. Lo cual en este proyecto se lo considera por lo menos un problema para poder enviar notificaciones o permitir al usuario realizar diferentes gestiones relacionadas a su perfil o la cuenta a la que pertenece.

Una direccion de email sin un punto, es valida segun los validadores del estandar

Revisando la documentacion, una direccion de email sin un punto, es valida segun los validadores pero para nuestro resulta ser que esta validacion no es lo suficientemente restrictiva. En este punto se hace necesario extender el validador de email para agregarle un poco mas de complejidad.

Asi es como nace esta nueva interface:

@Email(message="Please provide a valid email address")
@Pattern(regexp="[email protected]+\\..+", message="Please provide a valid email address")
@Target( { METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = {})
@Documented
public @interface ExtendedEmailValidator {
    String message() default "Please provide a valid email address";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

Se extiende la funcionalidad del estandar de java usando la annotation @Email y ademas mantenemos la posibilidad de un mensaje custom adecuado a las necesidades del negocio de nuestro proyecto.

Usando la validation constraint @Pattern, se incorpora el patron que necesitamos utilizar para agregar complejidad a la validacion y de este modo la interface extendida ya se adecua a esta nueva necesidad.

En el proximo articulo, voy a estar publicando la implementacion para poder validar campos de tipo Enum usando javax.validation.constraints.

Por Martin Larizzate, Java & Salesforce Developer

Fuentes:

https://javaee.github.io/javaee-spec/javadocs/javax/validation/constraints/Email.html

http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html

https://docs.jboss.org/hibernate/stable/validator/api/org/hibernate/validator/internal/constraintvalidators/AbstractEmailValidator.html

Deja una respuesta