Spring MVC 之校验器
数据验证
一个典型的 Spring MVC 应用会同时应用到 formatters/converters 和 validators。
在调用 controller 期间,将会有一个或多个 formatter,将字符串转化为 domain 对象的 field 值。格式化成功后,验证器就会介入,判断字段值是否为有效值或是否符合规则。Converter
和Formatter
作用于字段级。而验证器作用于对象级。
JSR 303
JSR(Java Specification Requests):Java 规范提案,是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。
JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是 Hibernate Validator,其他实现有 Apache BVal。
Hibernate Validator
属性 | 描述 |
---|---|
@AssertFalse | boolean 值必须为 false |
@AssertTrue | boolean 值必须为 true |
@CreditCardNumber | String 符合信用卡规范(不检验有效性) |
@DecimalMax() | BigDicimal,BigInteger,String,基本数值数据类型及包装器,小于等于指定小数 |
@DecimalMin() | BigDicimal,BigInteger,String,基本数值数据类型及包装器,大于等于指定小数 |
@Digits(integer, fraction) | integer 定义最大整数部分 fraction 定义最大小数部分 |
String 符合email地址 | |
@Future | Date,Calendar,是未来的日期 |
@Length(min, max) | String 长度符合范围 |
@Max() | BigDicimal,BigInteger,String,基本数值数据类型及包装器,小于等于指定整数 |
@Min() | BigDicimal,BigInteger,String,基本数值数据类型及包装器,大于等于指定整数 |
@NotBlank | String非null且非空(忽略首尾空白字符) |
@NotEmpty | String,Collection,Map,Array非null且非空 |
@NotNull | 不能为空 |
@Null | 必须为空 |
@Past | Date,Calendar,是过去的日期 |
@Pattern(regex, flag) | String 与正则表达式匹配 |
@Range(min, max) | BigDicimal,BigInteger,String,基本数值数据类型及包装器,在范围内 |
@Size(min, max) | String,Collection,Map,Array长度在范围内 |
@ScriptAssert(lang, script, alias) | 使用脚本验证 |
@URL(protocal, host, port) | String 为有效URL |
@Valid | 递归校验 |
实例
@RequestMapping(value = "/valid")
@ResponseBody
public String userValidator (@Valid User user, Errors errors) {
if (errors.hasErrors()) {
return "error";
}
return user.toString();
}
public class User {
@NotNull
@Size(min = 1)
private String name;
@NotNull
@Range(min = 18, max = 150)
private Integer age;
// getters and setters
// toString
}