这是我的自定义验证程序,用于检查某些字段的可用性。 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;
}
}
}
我已经阅读了类似的线程,我必须设置验证工厂。 我做到了这一点:
@SpringBootApplication
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class, args);
}
@Bean
public Validator validator(){
return new LocalValidatorFactoryBean();
}
}
但它仍然无效。 userRepository是null。可能我的配置错了,第一次尝试java配置。
答案 0 :(得分:0)
作为禁用Hibernates验证的替代方法,你试过这个:
@Primary
@Bean
public Validator validator(){
return new LocalValidatorFactoryBean();
}
这将根据建议here给出验证者偏好。
Mike Kowalski
答案 1 :(得分:0)
您必须了解为什么用户存储库为空。
请检查日志或检查数据库配置参数。
尝试在类AvailableValidator中添加一个构造函数,并将用户存储库作为该构造函数的参数。
或
为用户存储库提供setter方法,并在该setter方法上使用自动装配。