【问题标题】:JSR-303 Validation on sub-classJSR-303 对子类的验证
【发布时间】:2013-11-24 16:44:45
【问题描述】:

我有以下类结构

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

class Staff extends Person{
    private String staffId;
}

我想使用 JSR-303 对 Staff 类应用验证,其中 Staff address 和 phone 不能具有 null 值。但是,我还有一些其他类是 Person 类,我不希望应用验证。

我能想到的一种方法是重构 Person 并将“地址”和“电话”字段推送给员工,但这意味着重构许多其他类(更不用说这会导致冗余) ,因此我想避免一些事情。

更新。 我已经更改了 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。

【问题讨论】:

    标签: java bean-validation


    【解决方案1】:

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

    【讨论】:

    • 我试过了,我得到了以下异常:javax.validation.ValidationException: Property setAddress does not follow javabean conventions.
    • 确保您的访问器方法签名是public Address getAddress()public void setAddress(Address a)。您可能还想阅读Java Beans specification,因为它不是很长。
    猜你喜欢
    • 2015-01-10
    • 2011-10-30
    • 2018-08-15
    • 1970-01-01
    • 2016-06-21
    • 2011-08-15
    • 1970-01-01
    • 2018-08-24
    • 2011-06-09
    相关资源
    最近更新 更多