使用 grails:3.1.12
[问题]
我创建了一个插件,它在初始化时创建一个名为 JSON 的配置,以便以后可以使用它。
豆子:
MyBean implements InitializingBean{
void afterPropertiesSet() throws Exception {
JSON.createNamedConfig('mycfg',{
it.registerObjectMarshaller(new MyObjectMarshaller())
})
}
}
插入:
Closure doWithSpring() { {->
"myBean"(MyBean){}
}}
但是当我想使用配置并转换一个简单的HashMap时,它会抱怨没有找到Marshaller。
JSON.use 'mycfg',{([a:'3'] as JSON).toString()}
例外
Caused by: org.grails.web.converters.exceptions.ConverterException: Unconvertable Object of class: java.util.LinkedHashMap
at grails.converters.JSON.value(JSON.java:182)
at grails.converters.JSON.render(JSON.java:119)
[调查]
JSON 在调用 createNamedConfig 时创建一个委托默认配置,并将其用作 createNamedConfig 闭包的参数。我发现参数配置不等于加载 grails 时的配置(这是一个链式配置)。链式配置是由 Grails 在 ConvertersConfigurationInitializer 中设置的,它是在我的插件的 InitializingBean 初始化之后加载的。因此,当我的插件 bean 初始化时,JSON 不知道默认的 grails 配置。
[问题]
是否可以确保在 ConvertersConfigurationInitializer afterPropertiesSet 之后加载 MyBean afterPropertiesSet?(不直接在 MyBean 中引用 ConvertersConfigurationInitializer)