@Documented
@ReportAsSingleViolation
@Constraint(validatedBy = { FirstName.Validator.class })
@Target({ ElementType.FIELD, ElementType.PARAMETER })
@Retention(RUNTIME)
@NotBlank
@Size(min = 1, max = 50)
public @interface FirstName
{
String message() default "{the.package.FirstName.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
/**
* Validator.
*/
class Validator
implements ConstraintValidator<PaxFirstName, String>
{
@Override
public void initialize(FirstName constraintAnnotation)
{
// do nothing
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context)
{
// validation logic here
// if pass validation, return true, otherwise false
return true;
}
}
}
public interface EmployeeCheck {
}
public class Person
{
// bound to group "javax.validation.groups.Default.class"
@FirstName
private String firstName;
}
public class Employee
{
// bound to group "EmployeeChecks.class"
@FirstName(groups = EmployeeChecks.class)
private String firstName;
}
Programmatically specificy group
javax.validation.Validator validator = ...;
Employee employee = ...
Person person = ...
// trigger validation
validator.validate(person); // by default to Default.class
validator.validate(person, Default.class);
// NOT run validation
validator.validate(person, EmployeeChecks.class); // Won't auto add Default.class
// trigger validation
validator.validate(employee, EmployeeChecks.class);
validator.validate(employee, Default.class, EmployeeChecks.class);
// NOT run validation
validator.validate(employee);
validator.validate(employee, Default.class);
Declard group in Dropwizard (javax.validation.Valid
annotation can't specify group)
public MyResponse processX(@io.dropwizard.validation.Validated({Default.class, ProcessX.class} MyRequest request)