当前位置: 首页 > 知识库问答 >
问题:

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

章玮
2023-03-14

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

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

我使用<code>界面UserRepository扩展JpaRepositor

@Autowired
UserRepository userRepository;

我可以分别验证用户并将他们保存到数据库中,但是在一起使用时,比如调用< code > user repository . save(user); < code > @ auto wired user repository user repository;没有被初始化,所以它保持为空。

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

    这是完整的项目: https://github.com/leotrimvojvoda/todo

  • 共有2个答案

    殳自怡
    2023-03-14

    您的CustomValidation类似乎不是Spring管理的bean。尝试按如下方式添加@Component注释:

    @Component
    public class UsernameConstraintValidator implements ConstraintValidator<Username, String> {
        
        @Autowired
        UserRepository userRepository;
    
        @Override
        public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
            return !userRepository.existsUserByUsername(s);
        }
    }
    

    更新06/09/2021,根据https://stackoverflow.com/a/13361762/16572295的说法,您似乎还需要设置一个< code > LocalValidatorFactoryBean 来使其工作:

    @Bean
    public Validator validatorFactory() {
        return new LocalValidatorFactoryBean();
    }
    
    艾谦
    2023-03-14

    在application.propperties中添加spring.jpa.properties.javax.persistence.validation.mode=none

    我在这个线程中找到了答案:Spring Boot如何正确注入javax.validation.Validator

    这个答案包括我在bean验证和Hibernate方面遇到的问题的解决方案。

    "...因为Hibernate不知道Spring的上下文,而且据我所知,没有办法告诉它,即使是LocalValidatorFactoryBean也不行。这导致验证程序运行两次。一个正确,一旦失败。”

    简而言之,解决方案是通过在您的application.propperties中添加以下行来告诉Hibernate不运行验证

    spring.jpa.properties.javax.persistence.validation.mode=none
    

    我建议您阅读这个问题的完整答案,以更好地理解它对LocalValidatorFactoryBean的影响。

    也感谢若昂·迪亚斯帮助我找到了这个答案。

     类似资料:
    • < code>@size(max =241)用于字符串验证,如果字符串长度小于< code>112个字符,验证通过,但如果大于< code>112,则抛出异常: javax.validation。ValidationException:HV000028:期间发生意外异常 我该怎么解决呢?

    • 最近我的电脑无法运行npm安装。 我知道这个问题已经被问过了,无论如何,我已经检查了许多类似的问题,但仍然没有帮助。所以我在下面的代码下尝试添加更多信息。 问题第一。 我周围的所有人(在同一个办公室、网络、代理等)都没有这个问题,我的电脑以前能够运行这个命令。这似乎不是连接问题,因为我在这里找到了(在NodeJs中检查互联网连接)以下函数来检查URL是否可以解析,它得到的答案是“连接” 即使我清理

    • 我在做一个春靴项目。然后我尝试将mysql数据库连接到那个项目。我得到了名为“hikaripool-1-exception distry pool initialization”的错误。 这是整个StackTrace。

    • 问题内容: 当调用Surveymonkey api时 ,服务器需要使用它 作为json数据来完成我的请求。虽然它返回的数据是必需的,但它没有返回我认为我要求的其他URL。有谁知道为什么这不会给我这个? 编辑 https://developer.surveymonkey.com/mashery/get_collector_list, 这是我尝试拨打的电话,如果有帮助 问题答案: 正如评论中指出的那样

    • 我创建了一个自定义约束验证器,用于检查用户名的验证,验证器正在访问数据库并检查记录是否已存在以及是否符合正则表达式。我收到相当奇怪的错误,因为如果用户名已经存在,验证器可以正常工作,但是当输入有效输入(不存在的用户名)时,它会抛出一个 NullPointerException。 我放置了一个计数器和一些语句来跟踪应用程序崩溃的位置,我将在堆栈跟踪中包括这些。应用程序似乎正在调用和方法两次,第二次是

    • 这是我的客户端代码 这是我的Rest控制器代码: 如果我在调用后使用 String.class 作为返回类型,则相同的代码也有效。但不是响应实体类。我做错了什么,如果我需要客户端也相同的响应实体