我正在将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相同的问题.
我认为转换器(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 ...
这似乎描述了这种情况.
| 归档时间: |
|
| 查看次数: |
2950 次 |
| 最近记录: |