春季验证与休眠验证

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

为什么我应该将Hibernate Validator与我的Spring Boot项目一起使用,而不是提供的Spring Validation?我的公司需要一个理由来使用任何第三方库。

所有在线参考示例都建议使用Hibernate Validator,并且在Spring验证中找不到太多内容,请建议或指向其他链接。


答案 1

根据春季验证文档

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

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

以下是春季教程中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/


答案 2

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

您可以注意到 这与 不同。org.springframework.validation.Validatorjavax.validation.Validator

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

好吧,再详细说一些。

1)如果你想执行(一些)验证,这可以使用弹簧来完成。(下面是一些片段):

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框架支持。您需要做的就是让春天创造豆子LocalValidatorFactoryBean

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

并注入这种豆子。

import javax.validation.Validator;

@Service
public class MyService {

    @Autowired
    private Validator validator;
}

推荐