Quarkus实战:专为Kubernetes而优化的Java解决方案
上QQ阅读APP看书,第一时间看更新

5.4 创建自定义校验

问题

如何创建自定义校验?

解决方案

通过实现javax.validation.ConstraintValidator接口来使用Bean Validation扩展模型。

有时,Bean Validation规范提供的默认约束是不够的,需要实现与业务模型更紧密结合的约束。Bean Validation允许通过创建一个类来实现此目的,该类实现javax.validation.ConstraintValidator接口和注解——用于注解要验证的字段。

让我们看一个例子,假如你最喜欢的语言只能是基于JVM的语言。首先,你需要创建注解。创建一个名为org.acme.quick start.JvmLanguage.java的新类:

❶将约束条件作为正常的编译错误抛出

然后你需要创建逻辑来检测约束与否违反。这个新的类必须实现javax.validation.ConstraintValidator接口。

接下来,创建一个名为org.acme.quickstart.JvmLanguageValidator.java的类:

❶上一步定义的注解

❷适用于验证的对象类型

❸检查所提供的最喜欢的语言(value)是否是基于JVM的语言

最后,你需要注解org.acme.quick start.Developer中的favoriteLanguage字段:

打开一个新的终端窗口,启动Quarkus应用程序,然后尝试用POST方法发送一些请求:

讨论

REST端点、服务方法以及任何CDI作用域内对象上,任何遵循Bean Validation规范的验证都将在应用程序运行期间自动执行。如果你需要更多的控制,请看5.5节,该节介绍了校验对象的其他方法。

同样值得一提的是,默认情况下,违反约束的信息将使用系统语言返回。如果你想改变这个设置,可以在application.properties文件中通过设置quarkus.default-locale来实现:

对于REST端点,本地化将基于Accept-Language HTTP头实现。你可以在application.properties文件中指定支持的语言列表:

另见

关于更多信息,请访问以下网站:

·Jakarta Bean Validation(https://oreil.ly/R6L4d

·Hibernate Validator(https://oreil.ly/O7BNR