Spring验证与Hibernate验证

Nov*_*Guy 12 java validation spring hibernate-validator

我现在很困惑.我知道Hibernate Validator 6是Bean Validation 2.0规范的参考实现.它支持分组,错误消息的国际化,自定义方法验证等.问题是Spring 5是否支持这些功能,还是我只剩下Hibernate Validator 6?

为什么我应该使用Hibernate Validator和我的Sprig Boot项目而不是提供的Spring Validation.我的公司需要使用任何第三方库的理由.

所有在线参考示例都建议使用Hibernate Validator,并且在Spring验证中没有发现任何内容,请建议或指向其他链接.

Ale*_*981 5

根据Spring Validation文档

使用Bean验证,单个javax.validation.Validator实例通常会验证所有声明验证约束的模型对象。要使用Spring MVC配置这种JSR-303支持的验证器,只需将Bean验证提供程序(例如Hibernate Validator)添加到类路径中

您可以通过创建具有spring-boot-starter-web依赖性的示例spring-boot项目来验证这一点。它实际上将hibernate-validator依赖项添加到您的类路径中

这是春季教程中指向jsr-303的几个链接:

  1. https://howtodoinjava.com/spring/spring-mvc/spring-bean-validation-example-with-jsr-303-annotations/

  2. https://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/


sql*_*mmy 5

Hibernate Validation 是 JSR 303:Bean Validation API 的实现。Spring 有其 Validation 包(它支持 JSR 303:Bean Validation API,但不支持正确的实现)。

您可能会注意到这org.springframework.validation.Validator与 不同javax.validation.Validator

您可以通过创建一个像这里org.springframework.validation.Validator一样简单的类来执行 Spring 验证,但如果您需要遵循 JSR 303:Bean Validation API 的规范,您可以通过 Hibernate Validator 来完成。

好的,可以添加更多细节。

1)如果您想执行(某些)验证,可以使用 spring 来完成。(下面是一些片段):

import org.springframework.validation.Validator;

class MyService{
     Validator validator =  new MyValidator();
     //perform validation
    }
class MyValidator implements Validator{
    // Your own validation logic. You may use ValidationUtils to help. 

}
Run Code Online (Sandbox Code Playgroud)

2) 如果你想执行(JSR 303 规范)验证,你需要有像 Hibernate 这样的提供者。

import javax.validation.Validator;
class MyService{
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); //Bootstraping
        Validator validator = factory.getValidator(); 
       //perform validation
}
Run Code Online (Sandbox Code Playgroud)

上面的Bootstraping过程是由Spring框架支持的。你需要做的就是让 spring 创建 beanLocalValidatorFactoryBean

<bean id="validator"   
 class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
Run Code Online (Sandbox Code Playgroud)

并注入这个bean。

import javax.validation.Validator;

@Service
public class MyService {

    @Autowired
    private Validator validator;
}
Run Code Online (Sandbox Code Playgroud)