|
Post by account_disabled on Jan 29, 2024 21:16:58 GMT 14
Java 的静态类型系统是一种强大的机制,它允许您指定方法的前置条件和后置条件(从调用者的角度来看:提供什么和期望什么),编译器确保这些条件在运行时得到满足。Java Bean Validation 使这种约束模型更进一步、更接近特定领域。它提供了一个成熟的验证 API,它不仅允许通过一组直观的验证约束来验证类的字段。正如我们将在这篇文章中看到的,它还使开发人员能够在常规方法和构造函数中重用参数和返回值中的这些约束,并以契约设计的方式验证它们——手动或通过Java EE 拦截器自动进行。 如果您想了解该标准的核心功能,请查看这篇介绍性文章。那里解释的验证使用ValidatorAPI,而本文这里调用由较新的ExecutableValidator接口提供的方法 - 两者都是符合标准的实现的一部分,例如Hibernate Validator和Apache BVal。 验证方法参数 我们将在本综述中介绍的第一个方法是validateParameters(),它验证给定方法的参数。考虑下面的示例,它将一些基本约束绑定到以下追踪目标类与调用者达成的契约确实很容易,而无需从上到下扫描类并更深入地查看方法实现。简单地说, 的 WhatsApp 号码数据 前提条件setName()是非空字符串,而 的前提条件setEmail()是格式正确的电子邮件地址。 当然,合同必须在某个时候得到验证。为了实现这一点,该标准提供了上述validateParameters()方法 这里首先要强调的是,所有执行方法参数和返回值验证的方法(这也适用于构造函数)都是 API 的一部分ExecutableValidator,而不是经典的Validator. 第二个是验证过程本身的机制:一旦ExecutableValidator创建了 的实现者,整个验证过程就归结为使用所需参数调用正确的验证方法。 在上面的示例中,setName()的前提条件通过方法进行验证,该方法采用目标类的实例、要验证的方法以及存储在对象数组中的参数。考虑到在这种情况下数组仅包含一个空字符串,因此setName()不满足 的先决条件,这会引发约束冲突。 验证相反的前提怎么样setEmail() 这很容易理解。 验证方法返回值 同样,可以指定方法的后置条件并使用该方法对其进行验证。为了演示验证方法的返回值是多么容易,让我们重构之前的User类,如下所示在本例中,该getEmail()方法的后置条件是格式正确的电子邮件地址。以下是如何使用该方法验证该方法的后置条件 正如预期的那样,这也会弹出约束冲突,因为传递给 的getEmail()String 不满足该方法的后置条件。 验证构造函数参数 与方法类似,该标准允许通过validateConstructorParameters()方法验证构造函数中的参数。
|
|