
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。