Spring Frameworkを使用している場合は、Spring Expression Language(SpEL)を使用できます。私は、クロスフィールド検証を非常に簡単にするSpELに基づいたJSR-303バリデーターを提供する小さなライブラリを書いています。 https://github.com/jirutka/validator-springをご覧ください。
そして例では、あなたのケースのためにあります:
@SpELAssert(value = "someString != null", applyIf = "selected",
message = "{validator.missing_some_string}")
public class MyBean {
private boolean selected;
private String someString;
...
}
は、実は、これはあまりにも簡単でした。より興味深いものを試してください。パスワードフィールドの1つがnullでない場合は、パスワードフィールドの平等性を試してみてください。
@SpELAssert(value = "password.equals(passwordVerify)",
applyIf = "password || passwordVerify",
message = "{validator.passwords_not_same}")
public class User {
private String password;
private String passwordVerify;
}
そしてあなたも、これらの式では、独自の「ヘルパーメソッド」を使用することができます!
Hibernate Validatorの@ScriptAssert
アノテーションと比較して、これは純粋なJavaソリューションです.JSR-223に準拠したスクリプト言語を使用していないため、少し問題があります。反対に、このソリューションはSpringベースのアプリケーションでのみ面白いです。
[Hibernate Validator(JSR 303)でのクロスフィールド検証]の複製可能性(http://stackoverflow.com/questions/1972933/cross-field-validation-with-hibernate-validator-jsr-303) –