Java Web 学习(6) —— Spring MVC 之校验器

时间:2023-03-09 18:15:31
Java Web 学习(6) —— Spring MVC 之校验器

Spring MVC 之校验器

数据验证

一个典型的 Spring MVC 应用会同时应用到 formatters/converters 和 validators。

在调用 controller 期间,将会有一个或多个 formatter,将字符串转化为 domain 对象的 field 值。格式化成功后,验证器就会介入,判断字段值是否为有效值或是否符合规则。

ConverterFormatter作用于字段级。而验证器作用于对象级。

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 定义最大小数部分
@Email 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
}