2013-11-24 137 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應用驗證使工作人員的地址和電話不能爲空值。然而,我有一些其他的類是Person類,我不希望驗證被應用。

我可以想到的一種方法是通過重構Person並將字段'address'和'phone'推送給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

使用JSR-330中的註釋來註釋getters而不是字段。 您可以覆蓋Stuff中的獲得者並對其進行註釋。

+0

我試過了,我得到以下異常:javax.validation.ValidationException:屬性setAddress不遵循javabean約定。 –

+0

確保您的存取方法簽名是'public Address getAddress()'和'public void setAddress(Address a)'。您也可能想閱讀[Java Bean規範](http://download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/),因爲它不是很長。 – VGR

相關問題