Spring Boot 自定义约束验证器未注入(inject)服务

标签 spring validation dependency-injection spring-boot spring-java-config

这是我的自定义验证器,用于检查某些字段的可用性。 UserRepository 为空,因此验证器没有注入(inject)它。

public class AvailableValidator implements ConstraintValidator<Available,String> {

    @Autowired
    private UserRepository userRepository;

    private Available.Field type;

    public void initialize(Available usernameAvailable) {
        this.type = usernameAvailable.type();
    }

    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
        if (userRepository == null) System.out.println("\n\n------USER REPOSITORY IS NULL-------\n\n");


        switch (type){
            case EMAIL:
                return userRepository.findByEmail(s)==null;
            case NUMBER:
                return userRepository.findByNumber(s)==null;
            case NAME:
                return userRepository.findByName(s)==null;
            default:
                return false;
        }
    }
}

我已经阅读了我必须设置验证器工厂的类似线程。
我已经这样做了:
@SpringBootApplication
public class Application {

    public static void main(String[] args){
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public Validator validator(){
        return new LocalValidatorFactoryBean();
    }
}

但它仍然不起作用。 userRepository 为空。可能我配置错了,第一次尝试java配置。

最佳答案

作为禁用 Hibernates 验证的替代方法,您是否尝试过:

@Primary
@Bean
    public Validator validator(){
        return new LocalValidatorFactoryBean();
    }

这将按照建议提供您的验证器偏好 here .

迈克·科瓦尔斯基

关于Spring Boot 自定义约束验证器未注入(inject)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32127227/

相关文章:

java - Spring bean通过方法初始化

java - 为什么不使用 @ControllerAdvice 中的通用异常处理程序?

validation - 不变式和验证规则有什么区别?

asp.net - 您如何确定哪个验证程序失败?

angular - 强制多个组件使用同一个服务实例

java - header 位置不重定向

java - Spring - Autowiring 一个具有构造函数的类

javascript - 多个文件上传验证 - 限制选择同一文件两次

java - Guice 只注入(inject)一些构造函数

dependency-injection - 依赖注入(inject)框架会导致糟糕/懒惰的设计吗?