hibernate Validator 是 Bean Validation 的参考实现 。Hibernate Validator 提供了 JSR 303 规范中全部内置 constraint 的实现,除此以外还有一些附加的 constraint。java
在平常开发中,Hibernate Validator常常用来验证bean的字段,基于注解,方便快捷高效。git
1. Bean Validation 中内置的 constraint正则表达式
注解 做用算法
@Valid | 被注释的元素是一个对象,须要检查此对象的全部字段值 |
---|---|
@Null | 被注释的元素必须为 null |
@NotNull | 被注释的元素必须不为 null |
@AssertTrue | 被注释的元素必须为 true |
@AssertFalse | 被注释的元素必须为 false |
@Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@DecimalMax(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@Size(max, min) | 被注释的元素的大小必须在指定的范围内 |
@Digits (integer, fraction) | 被注释的元素必须是一个数字,其值必须在可接受的范围内 |
@Past | 被注释的元素必须是一个过去的日期 |
@Future | 被注释的元素必须是一个未来的日期 |
@Pattern(value) | 被注释的元素必须符合指定的正则表达式 |
2. Hibernate Validator 附加的 constraint数组
注解 | 做用 |
---|---|
被注释的元素必须是电子邮箱地址 | |
@Length(min=, max=) | 被注释的字符串的大小必须在指定的范围内 |
@NotEmpty | 被注释的字符串的必须非空 |
@Range(min=, max=) | 被注释的元素必须在合适的范围内 |
@NotBlank | 被注释的字符串的必须非空 |
---|---|
@URL(protocol=, host=, port=, regexp=, flags=) |
被注释的字符串必须是一个有效的url |
@CreditCardNumberurl |
被注释的字符串必须经过Luhn校验算法, 银行卡,信用卡等号码通常都用Luhn 计算合法性 |
@ScriptAssert (lang=, script=, alias=) |
要有Java Scripting API 即JSR 223 ("Scripting for the JavaTM Platform")的实现 |
@SafeHtml (whitelistType=, additionalTags=) |
classpath中要有jsoup包 |
hibernate补充的注解中,最后3个不经常使用,可忽略。spa
主要区分下@NotNull @NotEmpty @NotBlank 3个注解的区别:.net
@NotNull 任何对象的value不能为nullhibernate
@NotEmpty 集合对象的元素不为0,即集合不为空,也能够用于字符串不为nullcode
@NotBlank 只能用于字符串不为null,而且字符串trim()之后length要大于0
示例:
@DecimalMin(value = "0.1",message = "价格大于0.1元") @NotNull(message = "current_price 为空") private Float current_price; @Length(max = 14, message = "菜品名字小于15") @NotBlank(message = "菜品名为空") private String name; //菜品名 ,惟一 @Length(max = 125, message = "第三方菜品id太长") @NotBlank(message = "第三方菜品id 为空") private String other_dish_id; //第三方菜品id @Min(value = 100, message = "菜品id 为空") private Long dish_id; //菜品id @Range(min = 0, max = 1, message = "same_open_time 值错误") @NotNull(message = "same_open_time 为 null") private Integer same_open_time; //可售时间{1: 同接单时间,0:自定义时间,此时available_times可用} @Min(value = 1, message = "起订数大于1") @NotNull(message = "min_order_number 为 null") private Integer min_order_number = 1; //起订数 @Length(max = 299, message = "description 小于300") private String description; //菜品描述 private String url; //图片地址 @Range(min = 0, max = 1, message = "is_low_definition_img 值错误") private Integer is_low_definition_img; //是否为低清图,0高清,1:低清(添加菜品时,该值为0) //新增必填字段 @Size(min = 1, max = 1, message = "不能绑定多个分类") @NotEmpty(message = "dish_category_ids 为空") private Long[] dish_category_ids; //菜品所属分类id @Valid @NotEmpty(message = "norms 为空") private List<BDFoodNorm> norms; //菜品规格 @Range(min = 0, max = 5, message = "餐盒数在0-5之间") @NotNull(message = "餐盒数为空") private Integer box_number; //餐盒数 box_dish_number个菜品 box_number 个餐盒 @Range(min = 1, max = 10, message = "菜品数在1-10之间") @NotNull(message = "菜品数为空") private Integer box_dish_number; //菜品数 box_dish_number个菜品 box_number 个餐盒 //新增可选字段 // private BigInteger id; //未知.. 通常为空 @Valid @Size(max = 4,message = "菜品属性最多4条") private List<BDFoodAttr> attr; //菜品属性 private String gallery_img_id; //图片库图片id /** * 二维数组 * [0][周日]、[1][周一]、[2][周二]、[3][周三]、[4][周四]、[5][周五]、[6][周六] */ @NotNull(message = "available_times 为空") private DBFoodAvailableTime[][] available_times; //可售时间,第一维是可售星期{0:星期日,1:星期一,...},第二维是销售时间