2013-11-24 3 views
0

У меня есть следующая структура классовJSR-303 Проверка на подклассу

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

class Staff extends Person{ 
    private String staffId; 
} 

Я хочу, чтобы применить проверку с использованием JSR-303 на класс Персонал в котором адрес персонала и телефон не может иметь значение NULL. Тем не менее, у меня есть другие классы, которые являются классом Person, где я не хочу, чтобы проверка была применена.

Один из способов сделать это, о котором я мог подумать, - переделать «Человек» и нажать «Адрес» и «Телефон» в «Персонал», но это означает реорганизацию многих других классов (и не говоря уже о избыточности, это должно вызывать), и, следовательно, чего-то я хочу избежать.

Обновление. я изменил класс сотрудников, как следует

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

Аннотировать геттеры вместо полей, используя аннотации из JSR-330. Вы можете переопределить геттеры в Stuff и аннотировать их.

+0

Я пробовал это, и получил следующее исключение: javax.validation.ValidationException: свойство setAddress не соответствует javabean соглашениям. –

+0

Убедитесь, что подписи вашего метода доступа являются 'public Address getAddress()' и 'public void setAddress (Address a)'. Вы также можете прочитать спецификацию Java Beans (http://download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/), поскольку она не очень длинная , – VGR

Смежные вопросы