基础概念
什么是JSR
Java Specification Requests的缩写,意思是Java 规范提案。 是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。 任何人都可以提交JSR,以向Java平台增添新的API和服务。
什么是BV
是一个java规范(准确来说,属于JavaEE范围内的规范)。
- 允许您通过注释表达对象模型的约束
- 允许您以可扩展的方式编写自定义约束
- 提供API来验证对象和嵌套的(继承的)对象
- 提供API以验证参数并返回方法和构造函数的值
- 报告违规行为(本地化,个性化定制)
- 在Java SE上运行,但集成在Java EE 6及更高版本中; Bean Validation 2.0是Java EE 8的一部分
BV的实现有哪些?
主流实现框架,有Hibernate validation、Spring validation等。而Spring 的validation 核心模块,首先是完整实现BV规范,JSR380。其次,在spring-mvc中实现了自动化的校验。并且基于hibernate validation进行了增强(并兼容hibernate validation的实现)
为什么需要BV?
不用的现状(必要性)
在java的世界中,没有BV之前的校验,依靠一些第三方的工具包提供的基础简单的校验,或者自行编码验证。工具包主要有Apache的common工具包中的validationUtils、Spring的validationUtils。
例一:
public class StandardValidation {
public static void main(String[] args) {
System.out.println(validationWithoutAnnotation(" ", -1));
}
public static String validationWithoutAnnotation(String inputString, Integer inputInt) {
String error = null;
if (null == inputString) {
error = "inputString不能为null";
} else if (null == inputInt) {
error = "inputInt不能为null";
} else if (1 > inputInt.compareTo(0)) {
error = "inputInt必须大于0";
} else if (inputString.isEmpty() || inputString.trim().isEmpty()) {
error = "inputString不能为空字符串";
} else {
// DO
}
return error;
}
}
例二:
Spring的自行开发的数据校验功能由3个部分组成:
校验器——Validator,他会运行校验代码。
校验对象,实际上就是一个JavaBean,Validator会对其进行校验。
校验结果——Errors,一次校验的结果都存放在Errors实例中。
这是Spring在Bean Validation规范制定之前就实现的数据校验功能,ValidationUtils的注释中@since标签是2003年5月6号,而JSR-303定稿时间已经是6年之后(2009年)的事了。
package chkui.springcore.example.hybrid.springvalidation.entity;
//车辆信息
public class Vehicle {
private String name;
private String type;
private String engine;
private String manufacturer;
private Calendar produ