PDA

View Full Version : [JAVA]Validazione dei Bean Hibernate Validator\JSR 303 VALIDARE CAMPO E-MAIL


e-commerce84
30-11-2011, 16:53
Ciao ragazzi,
stò usando Hibernate Validator (che è un'implementazione di JSR 303) per effettuare la validazione dei campi dei bean.

Ho un problema su come validare un campo e-mail.

Vi faccio l'esempio concreto che si capisce al volo.

In un bean chiamato ChangeEmailAddressForm ho un campo di tipo String chiamato emailAddress, tale campo deve rispettare i seguenti 2 constraint:

1) NON DEVE ESSERE MAI NULLO
2) DEVE RISPETTARE IL CORRETTO FORMATO DI UN INDIRIZZO MAIL: qualcosa come:

nome@servizio.xx o nome.cognome@servizio.xx insomma...il formato dei classici indirizzi e-mail

Io ho fatto nel seguente modo:


@NotEmpty(message="Devi inserire un indirizzo email")
@Email(message="Inserisci un indirizzo e-mail valido")
private String emailAddress;


L'annotation @NotEmpty funziona correttamente ma mi sono accorto che l'annotation @Email invece dà un problema in quanto accetta anche e-mail del tipo: nome.cognome@servizio

In pratica accetta email senza il .it\.com\.net o quel che sia finale...da quello che ho capito email di questo tipo sono considerate e-mail valide perchè se l'applicazione girasse sulla stessa macchina dove gira anche il mio mail service potrei tranquillamente mandare una mail a: nome.cognome@mywebservicename

Però queto non è il mio caso...io ho proprio bisogno che la e-mail sia formattata secondo i criteri classici con l'estensione finale...deve controllare che ci sia anche qualcosa come .it o .com o .net o .quelchesia finale !!!

Come posso fare? non ne riesco ad uscire

Grazie
Andrea

banryu79
01-12-2011, 08:36
In pratica accetta email senza il .it\.com\.net o quel che sia finale...da quello che ho capito email di questo tipo sono considerate e-mail valide perchè se l'applicazione girasse sulla stessa macchina dove gira anche il mio mail service potrei tranquillamente mandare una mail a: nome.cognome@mywebservicename

Da quanto leggo qui (https://github.com/hibernate/hibernate-validator/blob/master/hibernate-validator/src/main/java/org/hibernate/validator/constraints/impl/EmailValidator.java) pare che sia implementato così per rispettare le specifiche della RFC 822, quindi valida correttamente gli indirizzi mail, proprio perche qualcosa@dominio è un indirizzo mail valido, strettamente parlando.


Però queto non è il mio caso...io ho proprio bisogno che la e-mail sia formattata secondo i criteri classici con l'estensione finale...deve controllare che ci sia anche qualcosa come .it o .com o .net o .quelchesia finale !!!

Sembra essere un problema/neccessità comune:
https://forum.hibernate.org/viewtopic.php?p=2363360
https://forum.hibernate.org/viewtopic.php?p=2434639
https://hibernate.onjira.com/browse/HVAL-43

E qui ho letto di una possibile soluzione:
http://stackoverflow.com/questions/4459474/hibernate-validator-email-accepts-askstackoverflow-as-valid