2013-11-15 53 views
0

我正在嘗試爲Spring項目編寫一些驗證註釋。依賴於其他變量的彈簧驗證

我有幾個可以爲空的字段,除非一個布爾值(在同一個對象中)爲真。

有一些簡單的方法是這樣的:

@NotNull(if xyz=true) 

?由於

+0

不知道,但我想你不能通過註釋來做到這一點,而必須使用valodator。 –

+0

你將不得不使用自定義約束和驗證器。 –

+0

[JSR 303驗證的可能重複,如果一個字段等於「某事」,那麼這些其他字段不應該爲空](http://stackoverflow.com/questions/9284450/jsr-303-validation-if-one-field -equals-something-then-these-other-fields-sho) –

回答

0

我認爲這是不可能的註釋(太複雜)的事情,但是這是可以做到通過實施org.springframework.validation.Validator界面相當簡單:

public class MyClassValidator implements Validator { 
    @Override 
    public boolean supports(Class c) { 
     return MyClass.class.equals(c); 
    } 

    @Override 
    public void validate(Object object, Errors errors) { 
     MyClass myClass = (MyClass) object; 

     if (myClass.getA() == null) { 
      errors.rejectValue("avalue", "avalue.empty", "'A' value cannot be empty"); 
     } 
     else if (myClass.getA() == true && (myClass.getB() == null || myClass.getB() < 0)) { 
      errors.rejectValue("bvalue", "bvalue.notvalid", "'B' value is not valid"); 
     } 
    } 
}