Bean Validation 注解-约束验证(一)

  企业级应用系统都是以数据为核心的,数据在系统内部体现为实体以及实体和实体之间的关系。无论是数据的增删改查、流程变迁、规则变换以及统计分析等,都跟实体脱离不了干系,在对实体的操作中,数据验证是重要的一步,系统的验证配置,可以减少很多繁琐的代码。在Java的分层架构中,从表示层到持久层,都需要对业务数据进行验证。

  数据验证在 Java 分层结构的应用开发中占据着重要位置。Java EE 6 提出了 Bean Validation 规范,使用注解的方式对 Java Bean 进行约束验证,不局限于某一层次或者某一编程模型,灵活易用。本文将向您系统的介绍该规范的各种特性。

  文章根据 Hibernate Validator 4.0 对 JSR303 规范的参考实现,做个随笔记录。


一、约束的定义

  Bean Validation 规范对约束的定义包括两部分,一是约束注解, @NotNull 就是约束注解;二是约束验证器,每一个约束注解都存在对应的约束验证器,约束验证器用来验证具体的 Java Bean 是否满足该约束注解声明的条件。

@NotEmpty (message = "firstname may be empty") //验证提示 message
	private String firstname;


  一个典型的约束注解的定义应该至少包括如下内容

 @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) //应用范围
 @Retention(RUNTIME) //运行时机
 @Constraint(validatedBy = {NotEmptyValidator.class}) //和注解关联的验证器,实验验证的功能
 public @interface NotEmpty { 
 String message() default "this string may be empty"; //验证输出消息
 Class<?>[] groups() default { }; //约束所属组别
 Class<? extends Payload>[] payload() default {};//负载 
 }

  约束注解定义完成后,需要同时实现与该约束注解关联的验证器。约束验证器的实现需要扩展 JSR303 规范提供的接口 javax.validation.ConstraintValidator。该接口有两个方法,方法 initialize 对验证器进行实例化,它必须在验证器的实例在使用之前被调用,并保证正确初始化验证器,它的参数是约束注解;方法 isValid 是进行约束验证的主体方法,其中 value 参数代表需要验证的实例,context 参数代表约束执行的上下文环境。

public interface ConstraintValidator<A extends Annotation, T> { 
 void initialize(A constraintAnnotation); 
 boolean isValid(T value, ConstraintValidatorContext context); 
 }

  定义验证器

 public class NotEmptyValidator implements ConstraintValidator<NotEmpty, String>{ 
 public void initialize(NotEmpty parameters) { 
 } 
 public boolean isValid(String string, 
    ConstraintValidatorContext constraintValidatorContext) { 
 if (string == null) return false; //验证具体输入实例
 else if(string.length()<1) return false; 
 else return true; 
 } 
 }

验证组合约束、多值约束









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值