Spring验证与Hibernate验证

时间:2018-01-11 05:41:57

标签: java spring validation hibernate-validator

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

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

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

2 个答案:

答案 0 :(得分:4)

根据Spring Validation documentation

  

使用Bean Validation,一个javax.validation.Validator实例   通常验证声明验证的所有模型对象   限制。使用Spring配置这样一个JSR-303支持的Validator   MVC,只需添加一个Bean Validation提供程序,例如Hibernate   验证者,到您的类路径

您可以通过创建具有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/

答案 1 :(得分:1)

休眠验证是JSR 303:Bean验证API的实现。 Spring有其Validation软件包(它支持JSR 303:Bean Validation API,但没有适当的实现)。

您可能会注意到org.springframework.validation.Validatorjavax.validation.Validator不同。

您可以仅通过创建实现org.springframework.validation.Validatorhere这样简单的类来执行Spring验证,但是如果需要遵循JSR 303:Bean验证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. 

}

2)如果要执行(JSR 303规范)验证,则需要具有其Hibernate之类的提供程序。

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

Spring Framework支持上面的Bootstraping进程。您需要做的就是让spring为LocalValidatorFactoryBean

创建bean。
<bean id="validator"   
 class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

并注入此bean。

import javax.validation.Validator;

@Service
public class MyService {

    @Autowired
    private Validator validator;
}