首页 > 代码库 > javaee6的核心特性--bean验证框架(整理)
javaee6的核心特性--bean验证框架(整理)
概述
在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
开发者可以借助于Validation API以编程的方式验证JavaBean。Bean Validation API的默认包是javax.validation。下面对该包中的一些类进行说明:
ConstraintValidator:这是一个接口,具体的约束验证类需要实现该接口。该接口定义了相关的逻辑以验证给定对象类型中的约束。
Validator:Validahttp://java.sun.com/javaee/6/docs/api/index.html?javax/validation/Validator.htmltor接口持有对象验证图的契约。该接口的实现必须是线程安全的。
ConstraintViolation:ConstraintViolation接口表示给定bean上的约束验证失败,它公开了约束违背上下文以及描述该违背情况的信息。
ValidationException:如果在验证过程中出现了某些不可恢复的错误就会抛出ValidationException异常。某些情况下可以指定该异常,如不合法的分组(group)定义、不合法的约束定义以及不合法的约束声明等等。
约束元数据请求API
Bean Validation规范提供了查询约束仓库的手段。该API主要用于工具支持和与其他框架、库以及JSR的集成。Bean Validation规范旨在为对象约束提供一个验证引擎和元数据仓库。需要进行约束定义、验证和元数据的框架(Java EE或Java SE)可以利用Bean Validation规范完成这些功能,从应用或是基础设施的角度来看,这么做可以避免不必要的重复工作。
Bean Validation已经集成到了JSF 2.0和JPA 2.0中。在JSF中可以将表单输入域与域对象的属性绑定起来。JSF 2和Bean Validation可以判断出绑定的是哪个属性并执行与之相关的验证,还会将约束违背的信息显示给用户。Hibernate Validator 4是Bean Validation规范的参考实现框架,其最新版增加了不少新特性,如分组验证、与JPA 2和JSF 2的自然集成以及扩展的注解集等等。
javaee6的核心特性--bean验证框架(整理)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。