1

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 は委任された defaultconfiguration を作成し、それを createNamedConfig クロージャの引数として使用します。引数の構成が、grails がロードされたときの構成と等しくないことを発見しました (これは Chainedconfiguration です)。チェーン構成は、ConvertersConfigurationInitializer の grails によってセットアップされ、これはプラグインの InitializingBean の初期化後にロードされます。そのため、JSON はプラグイン Bean の初期化時にデフォルトの grails 構成を認識しません。

[質問]

ConvertersConfigurationInitializer afterPropertiesSet の後に MyBean afterPropertiesSet が確実にロードされるようにすることは可能ですか? (MyBean で直接 ConvertersConfigurationInitializer を参照せずに)

4

1 に答える 1