本文介绍了Hibernate验证程序将验证不是@NotEmpty的空字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用Hibernate Validator 4.3.1时遇到问题.

I have problem with Hibernate Validator 4.3.1.

问题是,验证器验证的字段为空,并且没有@NotEmpty批注.

The problem is, that the validator is validating fields with are empty and don't have @NotEmpty annotations.

当提交人的Web表单并且未设置地址,电话,传真和网页时,将引发验证错误.我认为这是错误的,因为没有@NotEmpty批注.我想跳过没有@NotEmpty批注的字段.

When person's web form gets submitted and address, phone, fax and webpage are not set, an validation error is thrown. I think that's wrong, because there is no @NotEmpty annotation. I want skip fields with don't have @NotEmpty annotation.

任何人都可以解释问题出在哪里吗?谢谢.

Can anyone explain where the problem is? Thank you.

public class Person{

    private String name;
    private String notifiedBodyCode;
    private Address address;
    private String webpage;
    private String phone;
    private String fax;
    private String email;

    @Column(name = "name", length = 100)
    @NotEmpty(message = "{NotEmpty.NotifiedBody.name}")
    @Length(max = 100)
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @NotEmpty
    @Column(name = "notified_body_code", length = 25)
    @Length(max = 25)
    public String getNotifiedBodyCode() {
        return notifiedBodyCode;
    }

    public void setNotifiedBodyCode(String notifiedBodyCode) {
        this.notifiedBodyCode = notifiedBodyCode;
    }

    @Valid
    @ManyToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Pattern(regexp = "^(https?://)?[a-z_0-9\\-\\.]+\\.[a-z]{2,4}.*$")
    @Column(name = "web", length = 50)
    public String getWebpage() {
        return webpage;
    }

    public void setWebpage(String webpage) {
        this.webpage = webpage;
    }

    @Length(min = 9, max = 20)
    @Pattern(regexp ="[0-9\\+\\s]")
    @Column(name = "phone", length = 20)
    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Length(min = 9, max = 20)
    @Column(name = "fax", length = 20)
    public String getFax() {
        return fax;
    }

    public void setFax(String fax) {
        this.fax = fax;
    }

}

地址

public class Address{


    private String city;
    private String street;
    private String zip;
    private Country country;


    @Length(max = 50)
    @Column( name = "city", length= 50)
    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Length(max = 100)
    @Column( name = "street", length= 100)
    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    @Length(min = 5, max = 6)
    @Pattern(regexp = "^[\\d\\s]$")
    @Column(name = "zip", length = 6)
    public String getZip() {
        return (zip == null ? "" : zip);
    }

    public void setZip(String zip) {
        this.zip = zip;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "country_id")
    public Country getCountry() {
        return country;
    }

    public void setCountry(Country country) {
        this.country = country;
    }

}

国家/地区

public class Country{

    private String countryName;

    @NotEmpty
    @Length(max = 45)
    @Column(name = "country_name", length = 45)
    public String getCountryName() {
        return countryName;
    }

    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }

    @Override
    public String toString() {
        return "Country [id=" + id + ", countryName=" + countryName + "]";
    }

}

编辑-问题已解决.

问题出现在"^"表达式中.我必须改用"[^|]".

Problem was in "^" expression. I have to use "[^|]" instead.

推荐答案

很难理解您的问题,但是我断言您说的是手机空时会收到验证错误.

It was hard to understand your question, but I ASSUME that you are saying that you get a validation error when phone is empty.

那是因为您有一个@Length注释,该注释具有定义的最小值.

That would be because you have a @Length annotation with a defined min value.

这篇关于Hibernate验证程序将验证不是@NotEmpty的空字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-06 13:11