返回介绍

7.1 验证概览

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

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 值。这就是验证器的任务。

发布评论

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