从grails 1.3.4升级到grails 2.1.1后无法使用"as JSON"

mda*_*man 2 json grails-2.0

我正在将grails插件从1.3.4升级到grails 2.1.1.升级后,我现在有一个失败的集成测试,之前没有失败.它无法使用"as JSON"(grails.converters.JSON).

    @Test
public void testConvertCollectionOfEnvironmentSettingsToJSON() {
    EnvironmentSetting setting = configurationService.getEnvironmentSetting('ENFORCE_SCHEMA_INSTANCE_RULE')

    def jsonSetting = setting as JSON //exception thrown here
    def s = jsonSetting as String

    assertNotNull jsonSetting
}
Run Code Online (Sandbox Code Playgroud)

异常和堆栈跟踪:

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'com.company.ipsvc.configuration.domain.EnvironmentSettingAllRevs@48c12420' with class 'com.company.ipsvc.configuration.domain.EnvironmentSettingAllRevs' to class 'grails.converters.JSON'
at com.company.ipsvc.configuration.converter.json.basic.BasicEnvironmentSettingJSONIntegrationTests.testConvertCollectionOfEnvironmentSettingsToJSON(BasicEnvironmentSettingJSONIntegrationTests.groovy:28)
Run Code Online (Sandbox Code Playgroud)

我能够成功使用encodeAsJSON().我也有与XML相同的问题.

syn*_*ync 5

我认为转换器(as JSON语法)默认只适用于域对象和集合.

encodeAsJSON()我相信要转换任意对象你应该使用转换器.或者使用对象marshaller,告诉转换器如何处理对象.

尽管如此,文档还不是很清楚.

看到:

但我注意到http://grails.org/doc/latest/api/grails/converters/JSON.html#JSON%28java.lang.Object%29表示该对象转换为POGO ..也许这意味着如果你有一个编组?

我也找到了这个参考:

请注意,'as'运算符不会为普通对象重载...

域对象可以使用'as'运算符将对象强制转换为JSON,与集合相同.因此,与POGO不同的是,它们必须被按摩到一个列表中,或者已经被明确地称为encodeAsJSON ...

http://manbuildswebsite.com/2010/02/08/rendering-json-in-grails-part-2-plain-old-groovy-objects-and-domain-objects/

这似乎描述了这种情况.