Spring引导自定义约束验证器未注入服务

Gre*_*ack 9 validation spring dependency-injection spring-boot spring-java-config

这是我的自定义验证器,用于检查某些字段的可用性.UserRepository为null,因此验证器不会注入它.

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了类似的线程,我必须设置验证工厂.我这样做了:

@SpringBootApplication
public class Application {

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

    @Bean
    public Validator validator(){
        return new LocalValidatorFactoryBean();
    }
}
Run Code Online (Sandbox Code Playgroud)

但它仍然无效.userRepository是null.可能我的配置错了,第一次尝试java配置.

Mic*_*ski 1

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

@Primary
@Bean
    public Validator validator(){
        return new LocalValidatorFactoryBean();
    }
Run Code Online (Sandbox Code Playgroud)

这将为您提供此处建议的验证器偏好。

迈克·科瓦尔斯基