public interface Validator {
boolean validate(Object parameter);
}
public class EmailValidator implements Validator {
public boolean validate(Object parameter) {
}
}
public class User {
@Validate(validator = EmailValidator.class)
private String email;
// ...
}
public void saveUser(User user) {
Validator validator = getValidator();
Field[] fields = user.getClass().getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(Validate.class)) {
field.setAccessible(true);
Object value = field.get(user);
if (!validator.validate(value)) {
throw new InvalidParameterException("Invalid parameter: " + field.getName());
}
}
}
}
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
<scope>provided</scope>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<version>3.3.3</version>
<executions>
<execution>
<id>process</id>
<goals>
<goal>process</goal>
</goals>
<configuration>
<processors>
<processor>org.hibernate.validator.ap.ConstraintProcessor</processor>
</processors>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.2.0.Final</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>