【发布时间】:2021-11-03 10:01:18
【问题描述】:
我创建了一个自定义验证规则来检查数据库中是否存在用户名。
我的 User 类有一个用户名,该用户名有一个自定义验证规则,当创建一个对象时,它会检查数据库中是否存在相同的用户名。
我使用interface UserRepository extends JpaRepository<User, Integer> 将用户保存到数据库并在自定义验证规则中检查用户名是否已存在。我利用
@Autowired
UserRepository userRepository;
我可以单独验证用户并将它们保存到数据库中,但是当将它们一起使用时,例如调用 userRepository.save(user);,自定义验证规则中的 @Autowired UserRepository userRepository; 不会启动,因此它仍然为空。
javax.validation.ValidationException: HV000028: Unexpected exception during isValid call.
自定义验证规则
public class UsernameConstraintValidator implements ConstraintValidator<Username, String> {
@Autowired
UserRepository userRepository;
@Override
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
return !userRepository.existsUserByUsername(s);
}
}
试图在控制器中保存用户
@PostMapping("/save")
public String save(@Valid @ModelAttribute("user") User user,BindingResult result, @RequestParam String password2){
if(result.hasErrors()) return "register";
userRepository.save(user);
return "login";
}
-
这是完整的堆栈跟踪:https://justpaste.it/7rnx7
【问题讨论】:
标签: spring dependency-injection spring-data-jpa