2017-07-14 75 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