gogagubi
gogagubi

Reputation: 1015

Spring boot application custom validation annotation doesn't fire

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

Answers (1)

pepevalbe
pepevalbe

Reputation: 1380

There is some extra things you need to do to use a ConstraintValidator for request arguments:

  • Add @Validated in your controller class
  • Add a MethodValidationPostProcessor bean in a configuration class:

    @Configuration
    public class SpringConfiguration {
    
        @Bean
        public MethodValidationPostProcessor methodValidationPostProcessor() {
            return new MethodValidationPostProcessor();
        }
    }
    

Upvotes: 4

Related Questions