返回介绍

7.2 Spring 验证器

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

从一开始,Spring 就设计了输入验证,甚至早于 JSR 303(Java 验证规范)。因此,Spring 的 Validation 框架至今都很普遍,尽管对于新项目,一般建议使用 JSR 303 验证器。

为了创建 Spring 验证器,要实现 org.springframework.validation.Validator 接口。这个接口如清单 7.1 所示,其中有 supports 和 validate 两个方法。

清单 7.1 Spring 的 Validator 接口

package org.springframework.validation;
public interface Validator {
  boolean supports(Class<?> clazz);
  void validate(Object target, Errors errors);
}

如果验证器可以处理指定的 Class,supports 方法将返回 true。validate 方法会验证目标对象,并将验证错误填入 Errors 对象。

Errors 对象是 org.springframework.validation.Errors 接口的一个实例。Errors 对象中包含了一系列 FieldError 和 ObjectError 对象。FieldError 表示与被验证对象中的某个属性相关的一个错误。例如,如果产品的 price 属性必须为负数,并且 Product 对象被验证为负数,那么就需要创建一个 FieldError。例如,在欧洲出售的一本 Book,却在美国的网店上购买,那么就会出现一个 ObjectError。

编写验证器时,不需要直接创建 Error 对象,因为实例化 ObjectError 或 FieldError 花费了大量的编程精力。这是因为 ObjectError 类的构造器需要 4 个参数,FieldError 类的构造器则需要 7 个参数,如以下构造器签名所示:

ObjectError(String objectName, String[] codes, Object[] arguments,
    String defaultMessage)

FieldError(String objectName, String field, Object rejectedValue,
    boolean bindingFailure, String[] codes, Object[] arguments,
    String defaultMessage)

给 Errors 对象添加错误的最容易的方法是:在 Errors 对象上调用一个 reject 或者 rejectValue 方法。调用 reject,会往 FieldError 中添加一个 ObjectError 和 rejectValue。

下面是 reject 和 rejectValue 的部分方法重载:

void reject(String errorCode)
void reject(String errorCode, String defaultMessage)
void rejectValue(String field, String errorCode)
void rejectValue(String field, String errorCode,
    String defaultMessage)

大多数时候,只给 reject 或者 rejectValue 方法传入一个错误码,Spring 就会在属性文件中查找错误码,获得相应的错误消息。还可以传入一个默认消息,当没有找到指定的错误码时,就会使用默认消息。

Errors 对象中的错误消息,可以利用表单标签库的 Errors 标签显示在 HTML 页面中。错误消息可以通过 Spring 支持的国际化特性本地化。关于国际化的更多信息,请查看第 10 章。

发布评论

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