Spring Boot应用程序自定义验证注释不会触发

时间:2019-11-17 15:40:05

标签: spring-boot validation annotations

我想在Spring Boot应用程序中具有自定义验证批注。我已经完成了与示例中所示相同的所有操作,但是并没有触发。我缺少什么?这是代码

@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 {};
}

这是验证器类

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);
    }

}

这是控制器方法

@GetMapping("doSomething")
public void doSomething(@ContactNumberConstraint String phone) {
    System.out.println("Do something " + phone);
}

我也添加了此依赖关系,但不确定是否需要。

<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
</dependency>

有什么主意吗?

1 个答案:

答案 0 :(得分:2)

要使用ConstraintValidator作为请求参数,还需要做一些额外的事情:

  • 在您的控制器类中添加@Validated
  • 在配置类中添加MethodValidationPostProcessor bean:

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