我使用Hibernate Validator作爲JSR-303實現。JSR-303如何以不同方式驗證兩個子對象
假設我有:
class Form {
@Valid
private Owner mainOwner;
@Valid
private Owner secondOwner;
// ... many other fields
}
class Owner {
@DriverLicenseValid // some custom validation
private String driverLicense;
// ... many other fields
}
// ...
Form myForm;
validator.validate(myForm);
見,我想驗證整個表單,它包含了類型所有者的兩個類似的子對象。問題是,對於mainOwner driverLicense應該是@NotNull,對於secondOwner則應該是@Null。
我不能在這裏使用組(我可以嗎?),因爲整個模型是通過一個validate()調用來檢查的。沒有任何方法可以解決此問題,而無需將此規則作爲Form級別上的自定義約束進行編寫?
謝謝,但我問是否可以實現沒有自定義約束的表單級別 - 即上面的mainOwner字段。也許我沒有正確表達這一點。然而,既然你提出了我認爲自己的解決方案,我認爲沒有其他辦法。好吧,ScriptAssert肯定會這樣做,但它與編寫自定義驗證器幾乎相同。 –
@RodionGorkovenko我想不出任何其他合理的方式來做到這一點。所以你應該堅持你的第一個想法。 – SpaceTrucker