I want to validate a string against a set of values using annotations.
What I want is basically this:
@ValidateString(enumClass=com.co.enum)
String d
This is what I did.
Annotation
public @interface ValidateString {
String[] acceptedValues();
String message() default "{uk.dds.ideskos.validator.ValidateString.message}";
Class>[] groups() default { };
Class extends Payload>[] payload() default { };
}
Validation Class
public class StringValidator implements ConstraintValidator{
private List valueList;
@Override
public void initialize(ValidateString constraintAnnotation) {
valueList = new ArrayList();
for(String val : constraintAnnotation.acceptedValues()) {
valueList.add(val.toUpperCase());
}
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return valueList.contains(value.toUpperCase());
}
}
And i used it like
@ValidateString(acceptedValues={"Integer", "String"}, message="Invalid dataType")
String dataType;
Long maxValue;
Long minValue;
Now I need to figure out how to implement conditional check ie. if String then maxValue and minValue should be null or Zero..
Any ideas?