小编ove*_*ted的帖子

HV000028: isValid 调用期间出现意外异常

我创建了一个自定义验证规则来检查数据库中是否存在用户名。

我的 User 类有一个用户名,该用户名具有自定义验证规则,当创建对象时,它会在数据库中检查是否存在相同的用户名。

我使用 aninterface UserRepository extends JpaRepository<User, Integer>将用户保存到数据库中,并在自定义验证规则中检查用户名是否已存在。我利用

@Autowired
UserRepository userRepository;
Run Code Online (Sandbox Code Playgroud)

我可以单独验证用户并将其保存到数据库中,但是当一起使用它们时(例如在自定义验证规则中调用),userRepository.save(user);不会@Autowired UserRepository userRepository;启动,因此它保持为空。

javax.validation.ValidationException: HV000028: Unexpected exception during isValid call.
Run Code Online (Sandbox Code Playgroud)

自定义验证规则

public class UsernameConstraintValidator implements ConstraintValidator<Username, String> {
    
    @Autowired
    UserRepository userRepository;

    @Override
    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
        return !userRepository.existsUserByUsername(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

尝试将用户保存在控制器中

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

我的问题的说明

spring dependency-injection spring-data-jpa

2
推荐指数
1
解决办法
7429
查看次数