Conditional Validator
Problem
The constraints of the Bean Validation cannot be turned on/off programmatically or according to any condition of the model object.
The @GroupSequenceProvider annotation from Hibernate Validator (RI) allows you to emulate this feature, however, it is a bit boring and tiring implement a class for each validated model object.
Solution
An extension for Bean Validation 2.0 containing analogous annotations for each constraint. For example, if you want to apply @NotNull conditionally use @NotNullWhen(expression = "")
Currently, the constraint expression is provided by Commons Jexl. All provided expression must return a Boolean (true/false).
Whenever the expression returns true, Conditional Validator delegates to the provider (Hibernate Validator or Apache BVal) the corresponding validation. For example, when the @NotNulWhen expression is true, ConditionalValidator tells the provider to validate as @NotNull.
Usage
- Add dependency to pom.xml
<!-- If you use Hibernate Validator (RI) -->
<dependency>
<groupId>com.github.microtweak</groupId>
<artifactId>conditional-validator-hv</artifactId>
<version>${conditional-validator.version}</version>
</dependency>
<!-- If you use Apache BVal -->
<dependency>
<groupId>com.github.microtweak</groupId>
<artifactId>conditional-validator-bval</artifactId>
<version>${conditional-validator.version}</version>
</dependency>
- Add annotations Conditional Validator
@ConditionalValidate // Enable conditional validation on this class
public class User {
private boolean notifyByEmail;
@EmailWhen(expression = "notifyByEmail") // Add the conditional constraint and set the expression
private String email;
// Getters and Setters
}