13.07.2015 Views

JSR 303 的参考实现使用指南 - JBoss

JSR 303 的参考实现使用指南 - JBoss

JSR 303 的参考实现使用指南 - JBoss

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

第 3 章 创 建 自 己 的 约 束 规 则import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;public class CheckCaseValidator implements ConstraintValidator {private CaseMode caseMode;public void initialize(CheckCase constraintAnnotation) {}this.caseMode = constraintAnnotation.value();public boolean isValid(String object, ConstraintValidatorContext constraintContext) {if (object == null)return true;}if (caseMode == CaseMode.UPPER)return object.equals(object.toUpperCase());elsereturn object.equals(object.toLowerCase());}ConstraintValidator 定 义 了 两 个 泛 型 参 数 , 第 一 个 是 这 个 校 验 器 所 服 务 到 标 注 类 型 ( 在 我 们 的 例 子中 即 CheckCase), 第 二 个 这 个 校 验 器 所 支 持 到 被 校 验 元 素 到 类 型 ( 即 String).如 果 一 个 约 束 标 注 支 持 多 种 类 型 到 被 校 验 元 素 的 话 ,个 ConstraintValidator, 并 且 注 册 到 约 束 标 注 中 .那 么 需 要 为 每 个 所 支 持 的 类 型 定 义 一这 个 验 证 器 的 实 现 就 很 平 常 了 , initialize() 方 法 传 进 来 一 个 所 要 验 证 的 标 注 类 型 的 实 例 , 在 本例 中 , 我 们 通 过 此 实 例 来 获 取 其 value 属 性 的 值 , 并 将 其 保 存 为 CaseMode 类 型 的 成 员 变 量 供 下 一 步 使用 .isValid() 是 实 现 真 正 的 校 验 逻 辑 的 地 方 , 判 断 一 个 给 定 的 String 对 于 @CheckCase 这 个 约 束 条 件 来 说是 否 是 合 法 的 , 同 时 这 还 要 取 决 于 在 initialize() 中 获 得 的 大 小 写 模 式 . 根 据 Bean Validation 中 所推 荐 的 做 法 , 我 们 认 为 null 是 合 法 的 值 . 如 果 null 对 于 这 个 元 素 来 说 是 不 合 法 的 话 , 那 么 它 应 该 使用 @NotNull 来 标 注 .3.1.2.1. ConstraintValidatorContext例 3.3 “ 约 束 条 件 CheckCase 的 验 证 器 ” 中 的 isValid 使 用 了 约 束 条 件 中 定 义 的 错 误 消 息 模 板 , 然后 返 回 一 个 true 或 者 false. 通 过 使 用 传 入 的 ConstraintValidatorContext 对 象 , 我 们 还 可 以 给 约 束条 件 中 定 义 的 错 误 信 息 模 板 来 添 加 额 外 的 信 息 或 者 完 全 创 建 一 个 新 的 错 误 信 息 模 板 .例 3.4. 使 用 ConstraintValidatorContext 来 自 定 义 错 误 信 息package com.mycompany;import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;32

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!