gpt4 book ai didi

java - Spring Boot 自定义约束验证组件

转载 作者:行者123 更新时间:2023-12-02 01:45:16 25 4
gpt4 key购买 nike

配置类

@ComponentScan(basePackages = {"validator"})
class AppConfiguration { ... }

注解类

@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = UniqueLoginValidator.class)
public @interface UniqueLogin {
String message() default "{com.dolszewski.blog.UniqueLogin.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}

validator 类

@Component
class UniqueLoginValidator implements ConstraintValidator<UniqueLogin, String> {

private UserRepository userRepository;

public UniqueLoginValidator(UserRepository userRepository) {
this.userRepository = userRepository;
}

public void initialize(UniqueLogin constraint) {
}

public boolean isValid(String login, ConstraintValidatorContext context) {
return login != null && !userRepository.findByLogin(login).isPresent();
}

}

我有一个带有属性@UniqueLogin String login的类,我还使用其他注释,例如@Size@Max,最后2个有效,但我的自定义注释不起作用。

你能帮忙理解为什么spring不调用自定义 validator 吗?

最佳答案

它对我有用,在 src/main/resources/META-INF/services 内创建一个名为 javax.validation.ConstraintValidator 的文件,其中包含一个分隔的新行列表您创建的自定义约束 validator 的所有限定名称。

这样,Spring将自动注册自定义 validator 。

该文件将从 Spring 自动检查并包含到构建的工件中。

应用此解决方案后请注意注释配置。您应该使用 @Constraint(validatedBy = { }) 进行注释,以防止双重 validator 初始化。

关于java - Spring Boot 自定义约束验证组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53764079/

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