Java Spring验证与Hibernate验证
我现在对这两者感到困惑。我知道HibernateValidator6是BeanValidation2.0规范的参考实现。它支持分组, 错误消息国际化、自定义方法验证等。 问题是Spring5支持这些特性,还是我只剩下HibernateValidator6 为什么我应该在Spring启动项目中使用Hibernate验证器而不是提供的Spring验证?我的公司需要使用任何第三方库的理由 所有在线参考示例都建议使用Hibernate Validator,但在Spring验证中没有找到什么内容,请建议或指向其他链接。根据 通过Bean验证,一个javax.Validation.Validator实例 通常验证声明验证的所有模型对象 限制。使用Spring配置这样一个JSR-303支持的验证器 MVC,只需添加一个Bean验证提供程序,如Hibernate 验证程序,到您的类路径 您可以通过使用Java Spring验证与Hibernate验证,java,spring,validation,hibernate-validator,Java,Spring,Validation,Hibernate Validator,我现在对这两者感到困惑。我知道HibernateValidator6是BeanValidation2.0规范的参考实现。它支持分组, 错误消息国际化、自定义方法验证等。 问题是Spring5支持这些特性,还是我只剩下HibernateValidator6 为什么我应该在Spring启动项目中使用Hibernate验证器而不是提供的Spring验证?我的公司需要使用任何第三方库的理由 所有在线参考示例都建议使用Hibernate Validator,但在Spring验证中没有找到什么内容,请建议或
springbootstarterweb
依赖项创建示例springboot项目来验证这一点。它实际上将hibernate验证器依赖项添加到类路径中
以下是spring教程中jsr-303的几个链接:
Hibernate验证是JSR303:Bean验证API的实现。Spring有它的验证包(它支持JSR303:Bean验证API,但不支持正确的实现)
您可以注意到,
org.springframework.validation.Validator
不同于javax.validation.Validator
您只需创建一个实现
org.springframework.Validation.Validator
的类即可执行Spring验证,方法非常简单,但如果需要遵循JSR 303:Bean验证API的规范,您可以通过Hibernate验证程序来执行
好的,我再补充一些细节
1) 如果您想执行(某些)验证,可以使用spring来完成。
(以下是一些片段):
2) 如果要执行(JSR303规范)验证,需要有Hibernate之类的提供程序
import javax.validation.Validator;
class MyService{
ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); //Bootstraping
Validator validator = factory.getValidator();
//perform validation
}
上面的引导过程由Spring框架支持。您只需让spring为LocalValidatoryFactoryBean
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
感谢您的输入,您是说我不能仅独立使用Spring Validator,它下面将始终使用Hibernate Validator?org.springframework.validation.Validator接口可以独立使用,但它实际上是spring上下文工件的一部分,而spring上下文工件又依赖于org.hibernate:hibernate验证器这并不完全正确,spring验证不依赖于hibernate。您要提到的是“配置一个JSR-303/JSR-349验证器供Spring MVC使用”,如果您想执行“使用Spring的验证器接口进行验证”,您不需要hibernate验证器。
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
import javax.validation.Validator;
@Service
public class MyService {
@Autowired
private Validator validator;
}