为了方便大家理解,以下内容都将会以问答的形式展开。
问题1:JSR303,JSR349,JSR380,这是什么鬼?
答:首先解释下JSR,JSR是提交给JCP组织的Java规范提案,在提案通过后将成为JAVA平台的标准规范。 其中JSR303,JSR 349,JSR380是关于Bean Validation的提案。
JSR 303,也就是Bean Validation 1.0 ,是第一款关于object validation的一个标准。
JSR 349,也就是Bean Validation 1.1,在Bean Validation 1.0的基础上增加了许多新的特性,比如方法级别的校验,Bean Validation组件的依赖注入,分组校验,el表达式的支持。
JSR380,即Bean Validation 2.0,相比Bean Validation 1.1,2.0提供了更加灵活的容器级别级联的校验,也开始支持自定义容器级别的校验,对Java8的Optional也提供了支持,同时有了更丰富的注解约束,比如 @Email, @NotEmpty, @NotBlank, @Positive等等。
问题2:经常听说Hibernate Validator,这个又是什么?
答:上面提到过JSR就是一个标准,一个规范,相当于JAVA中的接口。而Hibernate Validator就是Bean Validation这个规范的一个标准实现,相当于接口的实现类。(以下的Bean Validation指的都是Bean Validation 2.0)
问题3:Spring Validation、Bean Validation、Hibernate Validator三者之间又有什么样的关系?
答:Spring Validation使用Bean Validation提供的API,提供了校验的抽象,而真正进行校验的是Bean Validation的标准实现Hibernate Validator。
调用关系如下所示:
Spring Validation —> Bean Validation —> Hibernate Validator
问题4:什么时候使用Spring Validation?什么时候使用Hibernate Validator?
答:spring项目,建议使用Spring Validation,这样更好地集成spring,实现针对抽象编程。
非spring项目,建议使用Javax Bean Validation api。
如果只是简单的测试应用或者测试项目,那完全可以直接使用Hibernate Validator。
问题5:怎么使用Spring Validation
问题6:@Valid、@Validated有什么区别?
答:@Valid是javax Validator(JSR)提供的一个注解,用来校验对象视图,但是不能在该注解里面指定校验组;@Validated是spring在此基础上抽象出的一个注解,扩展了@Valid的功能,可以设置对应校验组。
问题6:Spring method Validation方法级别校验的实现?
问题7:Spring method Validation方法级别校验的不足?
问题8:Spring method Validation方法的优化