正如文档所示,我在Micronaut项目中使用了Hibernate验证机制。
不幸的是,我需要手动对验证错误做出反应并使用特定的异常处理错误。因此,我不能使用推荐的方法验证方法参数
fun doStuff(@Valid argument: MyArgument): ... {...}
我想将Validator注入我的类,调用它并自己处理结果。在春天,这很容易实现。 Micronaut不幸告诉我它不知道如何提供验证器:
Message: No bean of type [javax.validation.Validator] exists
我的班级看起来像这样
import javax.validation.Validator
@Controller
class MyController(val validator: Validator) {...}
我错过了什么吗?我在某处读到应该有一个默认的验证bean工厂,因为我正在使用Micronaut v1.1.0。
谢谢。
你可以注入一个javax.validation.ValidatorFactory
,它将委托给你在类路径上的任何实现。
从1.2.0开始(尚未发布),您将能够注入一个io.micronaut.validation.validator.Validator
,这是Micronaut的验证实现,不使用反射。
可以通过添加一个提供验证bean的Factory来提供验证器,如下所示:
@Factory
class ValidatorFactory {
@Singleton
fun validator(): Validator = Validation.buildDefaultValidatorFactory().validator
}
这会将必要的Validator bean添加到应用程序上下文中并使其可用。