概述
在Java EE 6的Bean Validation出现之前,开发者不得不在表示层框架、业务层/持久层中编写验证规则以保证这些规则的同步性,但这么做非常浪费时间而且极易出错。Bean Validation是通过约束实现的,这些约束以注解的形式出现,注解可以放在JavaBean(如backing bean)的属性、方法或是类上面。约束既可以是内建的注解(位于javax.validation.constraints包下面),也可以由用户定义。
bean validate标准规范文档请查阅:https://jcp.org/aboutJava/communityprocess/final/jsr303/index.html
JSR303 内置的约束规则
@AssertTrue / @AssertFalse 验证适用字段:boolean 注解说明:验证值是否为true / false 属性说明:- @DecimalMax / @DecimalMin 验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long 注解说明:验证值是否小于或者等于指定的小数值,要注意小数存在精度问题 属性说明:公共 @Digits 验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long 注解说明:验证值的数字构成是否合法 属性说明:integer:指定整数部分的数字的位数。fraction: 指定小数部分的数字的位数。 @Future / @Past 验证适用字段:Date,Calendar 注解说明:验证值是否在当前时间之后 / 之前 属性说明:公共 @Max / @Min 验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long 注解说明:验证值是否小于或者等于指定的整数值 属性说明:公共 @NotNull / @Null 验证适用字段:引用数据类型 注解说明:验证值是否为非空 / 空 属性说明:公共 @Pattern 验证适用字段:String 注解说明:验证值是否配备正则表达式 属性说明:regexp:正则表达式flags: 指定Pattern.Flag 的数组,表示正则表达式的相关选项。 @Size 验证适用字段:String,Collection,Map,数组 注解说明:验证值是否满足长度要求 属性说明:max:指定最大长度,min:指定最小长度。 @Valid 验证适用字段:引用类型 注解说明:验证值是否需要递归验证 属性说明:无
实例:
@Entity
@Table(name = "agent")
@SequenceGenerator(name = "seq_gen", sequenceName = "seq_agent")
public class AgentEntity extends IdEntity {
    @NotBlank(message = "名称不能为空")
    @Size(max = 128, message = "名称长度超过128")
    @Pattern(regexp = "^[\\u4e00-\\u9fa5\\w\\d_]*$", message = "名称不符合规范")
    private String name;
    @NotBlank(message = "代号不能为空")
    @Size(max = 16, message = "代号长度超过16")
    @Pattern(regexp = "^[0-9a-zA-Z_]*$", message = "代号不符合规范")
    private String code;
    private AgentStatusEnum status;
    private String description;
    private Long createTime;
    private String createUser;
    private Long updateTime;
    private String updateUser;
    private Long lastHeartBeat;
    public AgentEntity() {
        super();
        this.status = AgentStatusEnum.OFFLINE;
    }
    @Column(name = "name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "code")
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    @Enumerated(EnumType.STRING)
    public AgentStatusEnum getStatus() {
        return status;
    }
    public void setStatus(AgentStatusEnum status) {
        this.status = status;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    @Column(name = "create_time")
    public Long getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Long createTime) {
        this.createTime = createTime;
    }
    @Column(name = "create_user")
    public String getCreateUser() {
        return createUser;
    }
    public void setCreateUser(String createUser) {
        this.createUser = createUser;
    }
    @Column(name = "update_time")
    public Long getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Long updateTime) {
        this.updateTime = updateTime;
    }
    @Column(name = "update_user")
    public String getUpdateUser() {
        return updateUser;
    }
    public void setUpdateUser(String updateUser) {
        this.updateUser = updateUser;
    }
    @Column(name = "last_heart_beat")
    public Long getLastHeartBeat() {
        return lastHeartBeat;
    }
    public void setLastHeartBeat(Long lastHeartBeat) {
        this.lastHeartBeat = lastHeartBeat;
    }
}
-------------------------------------------------------------------------------------------------------------------
补充:validate api
以下内容摘录自:http://developer.51cto.com/art/201003/190130.htm
原文地址:http://blog.csdn.net/gufachongyang02/article/details/40504371