我现在很困惑。我知道Hibernate Validator 6是Bean Validation 2.0规范的参考实现。它支持分组,错误消息的国际化,自定义方法验证等。 问题是Spring 5是否支持这些功能,还是我只剩下Hibernate Validator 6?
为什么我应该使用Hibernate Validator和我的Sprig Boot项目而不是提供的Spring Validation。我的公司需要使用任何第三方库的理由。
所有在线参考示例都建议使用Hibernate Validator,并且在Spring验证中没有发现,请提供建议或指向其他链接。
答案 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 :(得分:1)
休眠验证是JSR 303:Bean验证API的实现。 Spring有其Validation软件包(它支持JSR 303:Bean Validation API,但没有适当的实现)。
您可能会注意到org.springframework.validation.Validator
与javax.validation.Validator
不同。
您可以仅通过创建实现org.springframework.validation.Validator
像here这样简单的类来执行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 id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
并注入此bean。
import javax.validation.Validator;
@Service
public class MyService {
@Autowired
private Validator validator;
}