返回介绍

7.8 JSR 303 验证

发布于 2025-04-22 20:10:00 字数 2871 浏览 0 评论 0 收藏

JSR 303“Bean Validation”(发布于 2009 年 11 月)和 JSR 349“Bean Validation 1.1”(发布于 2013 年 5 月)指定了一整套 API,通过注解给对象属性添加约束。JSR 303 和 JSR 349 可以分别从以下网址下载:

http://jcp.org/en/jsr/detail?id=303
http://jcp.org/en/jsr/detail?id=349

当然,JSR 只是一个规范文档,本身用处不大,除非编写了它的实现。对于 JSR bean validation,目前有两个实现。第一个实现是 Hibernate Validator,目前版本为 5,JSR 303 和 JSR 349 它都实现了,可从以下网站下载:

http://sourceforge.net/projects/hibernate/files/hibernate-validator/

第二个实现是 Apache BVal,可从以下网站下载:

http://bval.apache.org/downloads.html

JSR 303 不需要编写验证器,但要利用 JSR 303 注解类型嵌入约束。JSR 303 约束见表 7.1。

表 7.1 JSR 303 约束

属性

描述

范例

@AssertFalse

应用于 boolean 属性,该属性值必须为 False

@AssertFalseboolean hasChildren;

@AssertTrue

应用于 boolean 属性,该属性值必须为 True

@AssertTrueboolean isEmpty;

@DecimalMax

该属性值必须为小于或等于指定值的小数

@DecimalMax("1.1")BigDecimal price;

@DecimalMin

该属性值必须为大于或等于指定值的小数

@DecimalMin("0.04")BigDecimal price;

@Digits

该属性值必须在指定范围内。integer 属性定义该数值的最大整数部分,fraction 属性定义该数值的最大小数部分

@Digits(integer=5,fraction=2)BigDecimal price;

@Future

该属性值必须是未来的一个日期

@FutureDate shippingDate;

@Max

该属性值必须是一个小于或等于指定值的整数

@Max(150)int age;

@Min

该属性值必须是一个大于或等于指定值的整数

@Max(150)int age;

@NotNull

该属性值不能为 Null

@NotNullString firstName;

@Null

该属性值必须为 Null

@NullString testString;

@Past

该属性值必须是过去的一个日期

@PastDate birthDate;

@Pattern

该属性值必须与指定的常规表达式相匹配

@Pattern(regext="\\d{3}")String areaCode;

@Size

该属性值必须在指定范围内

Size(min=2, max=140)String description;

一旦了解了 JSR 303 validation 的使用方法,使用起来会比 Spring 验证器还要容易。像使用 Spring 验证器一样,可以在属性文件中以下列格式来使用 property 键,覆盖来自 JSR 303 验证器的错误消息:

constraint.object.property

例如,为了覆盖以 @Size 注解约束的 Product 对象的 name 属性,可以在属性文件中使用下面这个键:

Size.product.name

为了覆盖以 @Past 注解约束的 Product 对象的 productionDate 属性,可以在属性文件中使用下面这个键:

Past.product.productionDate

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。