使用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)
[调查]
当调用createNamedConfig时,JSON会创建委派的默认配置,并将其用作createNamedConfig闭包的参数。我发现参数配置不等于加载grails时的参数配置(这是一个链式配置)。链接配置由ConvertersConfigurationInitializer中的grails设置,并在我的插件的InitializingBean初始化之后加载。因此,当我的插件bean初始化时,JSON不知道默认的grails配置。
[问题]
是否可以确保在ConvertersConfigurationInitializer afterPropertiesSet之后加载MyBean afterPropertiesSet? (不直接在MyBean中引用ConvertersConfigurationInitializer)
答案 0 :(得分:0)
您可以使用loadAfter
属性控制加载顺序。请查看 - plugin docs - understanding load order
请参阅本节的Controlling Load Order
部分。