2017-07-14 78 views
-1

我想驗證春季表單輸入使用休眠..當我嘗試使用@Email驗證電子郵件是不會返回任何消息..如果我使用@Pattern,它給我的輸出,但如果試圖驗證「[email protected]」它接受它..我想避免接受這樣的條目..請指導在這件事.. 這是我的代碼:@Email不工作,但@pattern在休眠

人。 java的

import java.io.Serializable; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 
import javax.validation.constraints.Pattern; 

import org.hibernate.validator.constraints.Email; 
import org.hibernate.validator.constraints.NotBlank; 
import org.hibernate.validator.constraints.NotEmpty; 

@Entity 
@Table(name="person") 
public class Person implements Serializable 
{ 
    @Id 
    @Column(name="name") 
    @NotBlank 
    private String name; 

    @NotBlank 
    @Column(name="address") 
    private String address; 

    @NotBlank 
    @Column(name="contact") 
    private String contact; 

    //@Email(message="Invalid") 
    @Pattern(regexp ="^[a-zA-Z0-9._%+-][email protected][a-zA-Z0-9.-]+\\.(?:[a-zA-Z]{2,6})$", message="Invalid E-Mail") 
    @Column(name="email") 
    private String email; 

    //getter-setters 
} 

messages.properties文件:

NotBlank.person.name = Name can not be empty 
NotBlank.person.address = Address can not be empty 
NotBlank.person.contact = Contact can not be empty 
+2

爲什麼?從模式角度來看'test @ test.com'是一個完全有效的電子郵件地址。此外,您的模式根據其規範不允許使用有效的電子郵件。 –

回答

0

正如其中一條評論所述,根據Hibernate Email Validator使用的正則表達式模式,您的輸入[email protected]構成一個有效的電子郵件地址。你可以看看Hibernate的AbstractEmailValidatorhere的源代碼。

實際上,大多數電子郵件驗證器都會將此輸入視爲有效的電子郵件。但是,爲了您的需要,它可能是無效的電子郵件,也許是因爲它最後一個點後面有4個字符,您可以使用您在問題中顯示的模式。

+0

現在您可以在最後一個點之後留出4個字符 - 請參閱https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#ICANN-era_generic_top-level_domains –

+0

@GrzegorzOledzki,我同意。這就是爲什麼我說OP的輸入將被大多數電子郵件驗證器視爲有效。 – VHS