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

5.5 以程序化的方式校验对象

问题

如何以程序化的方式校验对象?

解决方案

使用Bean Validation javax.validation.Validator类。

在某些情况下(例如,在non-CDI bean中),你可能想控制校验过程何时被执行。为此,我们提供了javax.validation.Validator类。

让我们创建一个端点,使用javax.validation.Validator校验输入,而不是使用@Valid注解的方式。打开org.acme.quickstart.DeveloperResource.java类并注入Validator实例:

❶以Bean Validation规范注入Validator类

❷@Valid是不需要的

❸用编程的方式校验对象

❹如果没有错误,则继续

❺如果有错误,则构建错误输出

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

讨论

Quarkus会自动创建一个javax.validation.ValidatorFactory的实例,你可以通过创建自己的bean来替换这个实例。在应用程序中,以下类型的实例将被自动注入ValidatorFactory中:

·javax.validation.ClockProvider

·javax.validation.ConstraintValidator

·javax.validation.ConstraintValidatorFactory

·javax.validation.MessageInterpolator

·javax.validation.ParameterNameProvider

·javax.validation.TraversableResolver

·org.hibernate.validator.spi.properties.GetterPropertySelectionStrategy

·org.hibernate.validator.spi.scripting.ScriptEvaluatorFactory

在前面的列表中,可能只有一个特定类型的实例,而且类应该被声明为@ApplicationScoped。