验证

验证采用的是 BeanValidator 技术,平台对其进行了封装,让它变得更简单好用,而且能同时生成前台验证。

基础

相对简单的一些验证,在实体上通过标记就可以实现,复杂的或者有关业务逻辑的验证则需要在 scaffold.js 中进行编写。

下面将对实体上的验证注解进行介绍。

1. 非空

标记:@NotNull

适用类型:所有类型

描述:验证一个字段的值不能为空或空字符串

@NotNull
public Integer getAge() {
    return age;
}

2. 非空(字符串)

标记:@NotBlank

适用类型:String

描述:验证一个 String 类型字段的值不能为空或空字符串

@NotBlank
public String getMobile() {
    return mobile;
}

3. 电子邮件

标记:@Email

适用类型:String

描述:验证一个 String 类型字段的值是否是一个有效的Email地址

@Email
public String getEmail() {
    return email;
}

4. 范围(字符串)

标记:@NullableSize

适用类型:String

描述:验证一个 String 类型字段要么为空, 要么长度是否在 min ~ max 的区间内

@NullableSize(min = 2, max = 200)
public String getAddress() {
    return address;
}

5. 范围(数字)

标记:@Range

适用类型:Long、Integer、Double、BigDecimal

描述:验证一个数字类型字段的值是否在 min ~ max 的区间内

@Range(min = 1, max = 100)
public Integer getAge() {
    return age;
}

6. 最小值

标记:@Min

适用类型:Long、Integer、Double、BigDecimal

描述:验证一个数字类型字段的值必须不小于指定值

@Min(value = 5)
public Integer getQq(){
    return qq;
}

7. 最大值

标记:@Max

适用类型:Long、Integer、Double、BigDecimal

描述:验证一个数字类型字段的值必须不大于指定值

@Max(value = 11)
public Integer getQq(){
    return qq;
}

8. 匹配

标记: Matches 适用类型:所有类型 描述:验证两个字段是否匹配

@Matches(source = "password", target = "password2", bindingProperties = "password")
public class Account extends DomainEntity {
    ...
}

注意: 这个注解是标注在类上的,source 跟 target 是匹配相等的字段名,bindingProperties 是触发这个验证的字段名。

9. 惟一

标记: Unique 适用类型:所有类型 描述:验证此字段数据是否惟一

@Unique.List({
        @Unique(groups = { Create.class }, namedQuery = "findDuplicateUsernameCountOnCreate", bindingProperties = "userName"),
        @Unique(groups = { Update.class }, namedQuery = "findDuplicateUsernameCountOnUpdate", bindingProperties = "userName")
})
@Matches(source = "password", target = "password2", bindingProperties = "password")
public class Account extends DomainEntity {
    ...
}

注意:这个注解是标注在类上的,@Unique.List是它多配置形式,namedQuery 绑定的是一个 SQL命名查询,bindingProperties 是触发这个验证的字段名,groups下面会讲到。

高级

验证有 Create, Update 两种分组,对应添加 和 编辑操作,在同一实体,不同业务操作的情况下,验证会有不同,当你为验证分了groups属性时,验证就中会在对应的操作上生效。


@NotNull(groups = Create.class)
public Boolean getDiabled() {
    return diabled;
}

@Min(value = 5, groups = Update.class)
public Integer getQq(){
    return qq;
}