JSR-303对子类的验证

时间:2013-11-24 16:44:45

标签: java bean-validation

我有以下类结构

public Abstract class Person {
    private String fullName;
    private Address address;
    private Phone ;
}

class Staff extends Person{
    private String staffId;
}

我想在类Staff上使用JSR-303进行验证,其中Staff地址和phone不能具有null值。但是,我有一些其他类是Person类,我不希望要应用验证。

我能想到的一种方法是通过重构Person并将字段'address'和'phone'推送给Staff,但这意味着重构很多其他类(更不用说这会造成冗余) ,因此我想避免。

更新。 我已经更改了Staff类,如下所示

public class Staff extends Person {
    @NotNull
    private String staffEmploymentId;

    public String getStaffEmploymentId() {
        return staffEmploymentId;
    }

    public void setStaffEmploymentId(String id) {
        this.staffEmploymentId = id;
    }

    @Override
    @NotNull
    public void setPhones(List<Phone> phones) {
        super.phones = phones;
    }

    @Override
    @NotNull
    public void setAddress(Address a) {
        super.address = a;
    }

    @Override
    @NotNull
    public Address getAddress(){
        return super.address;
    }
}

但是,我有以下错误。

javax.validation.ValidationException: Property setAddress does not follow javabean conventions.

我正在使用Apache BVal,而不是Hibernate Validator。

1 个答案:

答案 0 :(得分:1)

使用JSR-330中的注释来注释getter而不是字段。 您可以在Stuff中覆盖getter并对其进行注释。