- 内容提要
- 作者简介
- 译者简介
- 前言
- 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.1 验证概览
Converter 和 Formatter 作用于字段级。在 MVC 应用程序中,它们将 String 转换或格式化成另一种 Java 类型,如 java.time.LocalDate。验证器则作用于对象级。它决定某一个对象中的所有字段是否均是有效的,以及是否遵循某些规则。一个典型的 Spring MVC 应用会同时应用到 formatters/converters 和 validators。
如果一个应用程序中既使用了 Formatter,又有 validator(验证器),那么,应用中的事件顺序是这样的:在调用 Controller 期间,将会有一个或者多个 Formatter,试图将输入字符串转换成 domain 对象中的 field 值。一旦格式化成功,验证器就会介入。
例如,Order 对象可能会有一个 shippingDate 属性(其类型显然为 LocalDate),它的值绝对不可能早于今天的日期。当调用 OrderController 时,DateFormatter 会将字符串转化成 Date,并将它赋予 Order 对象的 shippingDate 属性。如果转换失败,用户就会被转回到前一个表单。如果转换成功,则会调用验证器,查看 shippingDate 是否早于今天的日期。
现在,你或许会问,将验证逻辑转移到 LocalDateFormatter 中是否更加明智?因为比较一下日期并非难事,但答案却是否定的。首先,LocalDateFormatter 还可用于将其他字符串格式化成日期,如 birthDate 或者 purchaseDate。这两个日期的规则都不同于 shippingDate。事实上,比如,员工的出生日期绝对不可能晚于今日。其次,验证器可以检验两个或更多字段之间的关系,各字段均受不同的 Formatter 支持。例如,假设 Employee 对象有 birthDate 属性和 startDate 属性,验证器就可以设定规则,使任何员工的入职日期均不可能早于他的出生日期。因此,有效的 Employee 对象必须让它的 birthDate 属性值早于其 startDate 值。这就是验证器的任务。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论