为Controller中的参数添加自定义验证注释-JSR-303

问题描述 投票:0回答:2

我不知道如何在Spring Boot中解决以下用例。确实,我有一个Spring Boot Rest Api(例如:user-api),它具有以下控制器方法,并带有参数的自定义验证器:

@PostMapping
   public User createUser(@ValidZipCode @RequestBody @Valid User user){
       return userService.saveUser(user);
   }

User类是在外部依赖项中定义的(例如:user-model)。它具有以下字段:

public class User {
   @NotNull
   private String firstName;
   @NotNull
   private String lastName;
   private String zipCode;
   // getters, setters ..
}

user-api中,我创建了以下自定义注释:

@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ZipCodeValidator.class)
public @interface ValidZipCode {

    String message() default "Must be a valid zipCode. Found: ${validatedValue}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};

}

还有ZipCodeValidator实现:

public class ZipCodeValidator implements ConstraintValidator<ValidZipCode, User> {
private ZipCodeService zipCodeService;

@Override
public void initialize(ValidZipCode constraintAnnotation) { }

@Override
public boolean isValid(User user, ConstraintValidatorContext constraintValidatorContext) {
    return !Objects.isNull(user.getZipCode()) ?
            zipCodeService.isValidZipCode(user.getZipCode()) :
            false;
}

NB:zipCodeService.isValidZipCode()是简单的boolean方法。

问题是,当我调用端点时,它从不访问@ValidZipCode批注。是否有任何要设置的bean配置可以使用?

为您提供帮助;)

spring-boot bean-validation
2个回答
1
投票

确保您的控制器类带有@Validated注释。

请参见@Validated中的以下引用:

要获得Spring驱动的方法验证的资格,所有目标类都必须使用Spring的documentation注释[...]进行注释>


0
投票

您确实使用过

© www.soinside.com 2019 - 2024. All rights reserved.