我不知道如何在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
配置可以使用?
为您提供帮助;)
确保您的控制器类带有@Validated
注释。
请参见@Validated
中的以下引用:
要获得Spring驱动的方法验证的资格,所有目标类都必须使用Spring的documentation注释[...]进行注释>
您确实使用过