- 内容提要
- 作者简介
- 译者简介
- 前言
- HTTP
- Servlet 和 JSP
- 下载 Spring 或使用 STS 与 Maven/Gradle
- 手动下载 Spring
- 使用 STS 和 Maven/Gradle
- 下载 Spring 源码
- 本书内容简介
- 下载示例应用
- 第 1 章Spring 框架
- 第 2 章模型 2 和 MVC 模式
- 第 3 章Spring MVC 介绍
- 第 4 章基于注解的控制器
- 第 5 章数据绑定和表单标签库
- 第 6 章转换器和格式化
- 第 7 章验证器
- 第 8 章表达式语言
- 第 9 章JSTL
- 第 10 章国际化
- 第 11 章上传文件
- 第 12 章下载文件
- 第 13 章应用测试
- 附录 A Tomcat
- 附录 B Spring Tool Suite 和 Maven
- 附录 C Servlet
- 附录 D JavaServer Pages
- 附录 E 部署描述符
7.8 JSR 303 验证
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
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论