概述
在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