gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:58:53 24 4
gpt4 key购买 nike

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

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

注意:zipCodeService.isValidZipCode() 是一个简单的boolean 方法。

问题是,当我调用端点时,它永远不会访问 @ValidZipCode 注释。是否有任何 bean 配置可以设置以使其工作?

感谢您的帮助;)

更新

感谢@cassiomolin 的回答。事实上,当我用 @Validated 注释 Controller 类时,它起作用了:D

我希望这篇文章能帮助其他开发者;)

最佳答案

确保您的 Controller 类被注释为 @Validated .

请参阅 documentation 中的以下引述:

To be eligible for Spring-driven method validation, all target classes need to be annotated with Spring’s @Validated annotation [...]

关于spring-boot - 为 Controller 中的参数添加自定义验证注释 - JSR-303,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60432760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com