gpt4 book ai didi

grails - 你如何实例化你自己的 Validateable 对象

转载 作者:行者123 更新时间:2023-12-02 15:21:43 26 4
gpt4 key购买 nike

我有一个可验证的对象。当我使用来自输入 Map 的 new 实例化它时,应该嵌入命令对象中的 ApplicationContext 不会被填充,并且当我调用 validate() 时调用失败,出现以下异常:

java.lang.IllegalStateException: Could not find ApplicationContext, configure Grails correctly first



当我想创建一个 Validateable 对象并将其绑定(bind)到值映射时,我必须做什么才能获得正确的 spring bean?

请注意此代码不在 grails Controller 中运行:它在 rabbitMq 消费者中运行。所以应用于 Controller 的简单解决方案在这里不起作用。
class MyConsumer {
static rabbitConfig = [
queue : 'myQueue'
]

def handleMessage(Map message, MessageContext context) {
def request = new MyValidateableRequest(message) //instantiates just a POGO
if (request.validate()) { //Exception here
//...
} else {
//...
}
}
}

最佳答案

这取决于 Grails 版本以及是否使用 RabitMQ 插件。通常消费者应该是一个spring bean,您可以使用如下代码。 grailsApplication是应该注入(inject)消费者的bean

def object = new MyValidateableRequest()
//do request binding here
object.properties = [message: message]
AutowireCapableBeanFactory acbf = grailsApplication.mainContext.autowireCapableBeanFactory
acbf.autowireBeanProperties object, AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, false
object.validate()

如果您使用的是 Grails 3,则不需要插件的示例
https://spring.io/guides/gs/messaging-rabbitmq/可能更有趣

关于grails - 你如何实例化你自己的 Validateable 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34465784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com