Micronaut - 如何注入 Hibernate 验证器

Micronaut - How to inject Hibernate validator

我按照文档的建议在我的 Micronaut 项目中使用 Hibernate 验证机制。

不幸的是,我需要手动对验证错误做出反应并处理具有特定异常的错误。因此,我不能使用推荐的验证方法参数的方法

fun doStuff(@Valid argument: MyArgument): ... {...}

我想将 Validator 注入我的 class,调用它并自己处理结果。在 Spring 这很容易做到。不幸的是,Micronaut 告诉我它不知道如何提供验证器:

Message: No bean of type [javax.validation.Validator] exists

我的class看起来像这样

import javax.validation.Validator

@Controller
class MyController(val validator: Validator) {...}

我错过了什么吗?我在某处读到应该有一个默认的验证 bean 工厂可用,因为我正在使用 Micronaut v1.1.0。

谢谢。

可以通过添加提供验证 bean 的工厂来提供验证器,如下所示:

@Factory
class ValidatorFactory {
    @Singleton
    fun validator(): Validator = Validation.buildDefaultValidatorFactory().validator
}

这会将必要的验证器 bean 添加到应用程序上下文并使其可用。

您可以注入一个 javax.validation.ValidatorFactory ,它将委托给您在类路径上的任何实现。

从 1.2.0(尚未发布)开始,您将能够注入 io.micronaut.validation.validator.Validator 这是 Micronaut 不使用反射的验证实现。