Reputation: 1015
I want to have custom validation annotation in my spring boot application. I've done everything same as it is shown in examples, but it doesn't fire. What I'm missing? Here is code
@Documented
@Constraint(validatedBy = ContactNumberValidator.class)
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface ContactNumberConstraint {
String message() default "Invalid phone number";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
here is validator class
public class ContactNumberValidator implements ConstraintValidator<ContactNumberConstraint, String> {
@Override
public void initialize(ContactNumberConstraint contactNumber) {
}
@Override
public boolean isValid(String contactField, ConstraintValidatorContext cxt) {
System.out.println("Validating....");
return contactField != null && contactField.matches("[0-9]+")
&& (contactField.length() > 8) && (contactField.length() < 14);
}
}
and here is controller method
@GetMapping("doSomething")
public void doSomething(@ContactNumberConstraint String phone) {
System.out.println("Do something " + phone);
}
Also I added this dependency but I am not sure if it is needed.
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
any idea?
Upvotes: 1
Views: 254
Reputation: 1380
There is some extra things you need to do to use a ConstraintValidator for request arguments:
@Validated
in your controller classAdd a MethodValidationPostProcessor bean in a configuration class:
@Configuration
public class SpringConfiguration {
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
}
Upvotes: 4