Grails 在使用 grails 插件后从 Marshaller 抛出 ConverterException
Grails throws ConverterException from Marshaller after using grails plugin
我的 grails 应用程序中有 Marshaller,它工作正常,但在我的应用程序中集成插件后,它抛出 error.Error 如下:
Caused by: org.grails.web.converters.exceptions.ConverterException:
Error converting Bean with class
org.hibernate.persister.entity.SingleTableEntityPersister at
org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:84)
at
org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:39)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:45)
at
org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:30)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:66)
at
org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:39)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:66)
at
org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:39)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:66)
at
org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:39)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:67)
at
org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:39)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:45)
at
org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:30)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:67)
at
org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:39)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:67)
at
org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:39)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.json.CollectionMarshaller.marshalObject(CollectionMarshaller.java:41)
at
org.grails.web.converters.marshaller.json.CollectionMarshaller.marshalObject(CollectionMarshaller.java:30)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:67)
at
org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:39)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.json.CollectionMarshaller.marshalObject(CollectionMarshaller.java:41)
at
org.grails.web.converters.marshaller.json.CollectionMarshaller.marshalObject(CollectionMarshaller.java:30)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:67)
at
org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:39)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:45)
at
org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:30)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.ClosureObjectMarshaller.marshalObject(ClosureObjectMarshaller.java:61)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.json.CollectionMarshaller.marshalObject(CollectionMarshaller.java:41)
at
org.grails.web.converters.marshaller.json.CollectionMarshaller.marshalObject(CollectionMarshaller.java:30)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:45)
at
org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:30)
at grails.converters.JSON.value(JSON.java:184) at
grails.converters.JSON.render(JSON.java:119) at
grails.converters.JSON.render(JSON.java:132) at
org.grails.compiler.web.converters.RenderConverterTrait$Trait$Helper.render(RenderConverterTrait.groovy:22)
at
com.goglides.ListingController.feature(ListingController.groovy:17)
... 52 common frames omitted Caused by:
java.lang.StringIndexOutOfBoundsException: String index out of range:
-1 at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:935)
at java.lang.StringBuilder.substring(StringBuilder.java:76) at
grails.converters.JSON.handleCircularRelationship(JSON.java:341) at
grails.converters.JSON.value(JSON.java:176) at
grails.converters.JSON.convertAnother(JSON.java:144) at
org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:66)
您使用的是什么插件,它与您使用的 grails 版本兼容吗?您也可以尝试 grails clean
并重新启动。
您的插件是否使用 org.grails:grails-datastore-rest-client
插件中的 new RestBuilder()
?那么你很有可能触发this bug in Grails。我刚刚在我们的代码中再次遇到了这个问题:-(
解决方法:您必须将插件代码重写为如下所示:
RestBuilder rest = new RestBuilder(
...
// workaround for https://github.com/grails/grails-data-mapping/issues/864
registerConverters: false
)
注意事项 如果您的代码依赖于可用于正文内容的转换器,那么您将不得不重写代码以手动处理转换。 IE。来自
new RestBuilder(...)
.put(...) {
...
body object as JSON
}
到
String json = (object as JSON).toString()
new RestBuilder(
...
// workaround for https://github.com/grails/grails-data-mapping/issues/864
registerConverters: false
)
.put(...) {
...
body json
}
我的 grails 应用程序中有 Marshaller,它工作正常,但在我的应用程序中集成插件后,它抛出 error.Error 如下:
Caused by: org.grails.web.converters.exceptions.ConverterException: Error converting Bean with class org.hibernate.persister.entity.SingleTableEntityPersister at org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:84) at org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:39) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:45) at org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:30) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:66) at org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:39) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:66) at org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:39) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:66) at org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:39) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:67) at org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:39) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:45) at org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:30) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:67) at org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:39) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:67) at org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:39) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.json.CollectionMarshaller.marshalObject(CollectionMarshaller.java:41) at org.grails.web.converters.marshaller.json.CollectionMarshaller.marshalObject(CollectionMarshaller.java:30) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:67) at org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:39) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.json.CollectionMarshaller.marshalObject(CollectionMarshaller.java:41) at org.grails.web.converters.marshaller.json.CollectionMarshaller.marshalObject(CollectionMarshaller.java:30) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:67) at org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:39) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:45) at org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:30) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.ClosureObjectMarshaller.marshalObject(ClosureObjectMarshaller.java:61) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.json.CollectionMarshaller.marshalObject(CollectionMarshaller.java:41) at org.grails.web.converters.marshaller.json.CollectionMarshaller.marshalObject(CollectionMarshaller.java:30) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:45) at org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:30) at grails.converters.JSON.value(JSON.java:184) at grails.converters.JSON.render(JSON.java:119) at grails.converters.JSON.render(JSON.java:132) at org.grails.compiler.web.converters.RenderConverterTrait$Trait$Helper.render(RenderConverterTrait.groovy:22) at com.goglides.ListingController.feature(ListingController.groovy:17) ... 52 common frames omitted Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:935) at java.lang.StringBuilder.substring(StringBuilder.java:76) at grails.converters.JSON.handleCircularRelationship(JSON.java:341) at grails.converters.JSON.value(JSON.java:176) at grails.converters.JSON.convertAnother(JSON.java:144) at org.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller.marshalObject(GenericJavaBeanMarshaller.java:66)
您使用的是什么插件,它与您使用的 grails 版本兼容吗?您也可以尝试 grails clean
并重新启动。
您的插件是否使用 org.grails:grails-datastore-rest-client
插件中的 new RestBuilder()
?那么你很有可能触发this bug in Grails。我刚刚在我们的代码中再次遇到了这个问题:-(
解决方法:您必须将插件代码重写为如下所示:
RestBuilder rest = new RestBuilder(
...
// workaround for https://github.com/grails/grails-data-mapping/issues/864
registerConverters: false
)
注意事项 如果您的代码依赖于可用于正文内容的转换器,那么您将不得不重写代码以手动处理转换。 IE。来自
new RestBuilder(...)
.put(...) {
...
body object as JSON
}
到
String json = (object as JSON).toString()
new RestBuilder(
...
// workaround for https://github.com/grails/grails-data-mapping/issues/864
registerConverters: false
)
.put(...) {
...
body json
}