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 不使用反射的验证实现。
我按照文档的建议在我的 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 不使用反射的验证实现。