2016-07-25 125 views
1

我正在驗證我的數據訪問對象類的字段。在一次嘗試中,我已經開始向屬性添加Bean Validation註解(@NotNull,@NotBlank,@Min,@Max等)。我也有更多的註釋傑克遜(JsonProperty(..))爲swagger庫和文檔(@Api(...))。在我看來,課堂非常「髒」,有許多註釋(每個屬性至少有三個註釋)。一個字段的例子:何時使用Bean驗證與自定義驗證框架?

@JsonProperty("ownName") 
@Api(description="it is my own name" required=true) 
@Valid 
@NotNull 
private SomeObject object; 

在另一種嘗試,我已經同春Validator界面進行自己的驗證。如果使用自定義驗證程序(如Spring界面),它似乎更清晰,並且還允許您自由地爲不同情況生成多個驗證程序。另外,類似乎沒有如此重載,註釋和驗證獨立於類。的Validator例如:

public class UserValidator implements Validator { 

    @Override 
    public boolean supports(Class<?> arg0) { 
     return User.class.isAssignableFrom(arg0); 
    } 

    @Override 
    public void validate(Object obj, Errors error) { 
     User user = (User) obj; 
     if(user.getPassword().length() < 10) 
     { 
      error.reject("Password must be lesser than 10"); 
     } 

     //more validations.... 

    } 
} 
  • 當你使用一個或其他?
  • 每個的優缺點是什麼?

回答

2

我認爲這是一個品味和用例的問題。我同意有時候感覺最終會出現某種標註超載的情況。

使用Bean驗證的一些原因是它是一個標準。約束註釋是標準化的,許多框架與它集成在一起,例如JPA,如果您想添加另一個基於註釋的框架;-)

使用類似於Spring的東西將您綁定到特定的庫/框架。你的代碼便攜性較差。如果你當然從來沒有看到過你會離開Spring的情景,這可能沒有關係。

當然,你可以做一些土生土長的完全,但在這種情況下,你需要將整個集成代碼寫入例如春,REST,JPA等

也寫一個通用的驗證框架是不不重要的。有很多事情要考慮。