`
visualcatsharp
  • 浏览: 41154 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

解决Jsonwriter发生的Positioned Update not supported问题

    博客分类:
  • Java
阅读更多
      这篇文章其实早在做触动商城的时候已经想写了,不过一直空不出时间和心情来。

      有一次用jsonplugin输出json的时候,发生了以下异常:java.sql.SQLException: Positioned Update not supported,其实以前也遇到过这种问题,原因也找到了,是因为我们生成json的类是hibernate的model类,当中有一些对象是延迟加载的,这些对象并不是原model类中的属性,而是由cglib这个字节码生成器动态生成的对象。Hibernate在这个子类中添加了hibernateLazyInitializer等等的附加属性。由于jsonplugin并不区分类和动态生成的类,所以也会试图序列化hibernateLazyInitializer属性,从而导致出现上述的异常。

       以前项目时间紧急,采用了治标不治本的紧急应对方法:将那些延迟加载的对象都用一个默认构造方法的对象来代替,但这样不利用复用。

       在网上以Positioned Update not supported为关键字搜索了一下,发现了一篇很有用的文章,文本也提到这个问题,并给出了解决方法。不过我却发现文本提到的jsonplugin和我们项目中使用的jsonplugin有些地方不太相同,但它的思路都是一样的。沿用这个思路应该就可以解决问题了。

       思路如下:

1、判断这个对象是否由cglib生成的。代码如下:

boolean isCreateByCGLIB = clazz.getName().indexOf("$$EnhancerByCGLIB$$") > -1 ? true : false;

如果此对象确实是由cglib生成的,那么我们取此对象的基类,这一步很关键,因为通过取得此对象的基类,我们就忽略了所有由cglib生成的跟hibernate相关的属性。

2、通过反射,取得此对象的所有继续于基类的属性。

3、通过反射,取得此对象的所有get方法器(这一步不能省,不然出来的属性就少了)。

4、输出json。

问题解决,开源的力量就是伟大。
分享到:
评论
1 楼 tryonmind 2010-10-20  
那是不是直接将配置文件中的lazy=true换成false就ok了呢?

相关推荐

    JsonWriter

    JsonWriter

    修改后的JSONWriter类

    修改后的JSONWriter类,相信请见

    JsonWriter_C++_

    标题 "JsonWriter_C++_" 暗示我们讨论的是一个C++实现的JSON写入工具,可能是用于序列化数据到JSON格式的库。在描述中提到的“使用libcurl动态库上传文件和字符串”,表明这个项目可能包含了网络通信功能,通过...

    jsonwriter:用于shellfire的json编写函数模块

    jsonwriter :功能模块,用于 该模块为使用应用程序编写 JSON 提供了一个简单的框架。 它包含许多用于正确生成适当转义的 JSON 的辅助方法。 此模块的 API 尚不稳定。 示例用户是通过使用模块。 兼容性 标签与 ...

    LitJson 扩展 扩展了一个不转义汉字的方法

    为了解决这个问题,我们可以对 LitJson 进行扩展,使其支持不转义汉字的 JSON 序列化。 首先,让我们理解一下 JSON 对中文字符的转义。在 JSON 格式中,非 ASCII 字符(如汉字)通常会被转换为 Unicode 转义序列,...

    JsonWriter.rar_Windows编程_Java_

    标题中的"JsonWriter.rar"指的是一个包含JsonWriter相关代码的压缩包,主要针对Windows平台的编程,使用Java语言实现。描述中提到的“write Messages Array Source Code for Android”表明这个JsonWriter是为Android...

    json-writer.zip_C++_JSON_Json::Writer_jsonwriter_解析json

    3. **错误处理**:在处理无效的JSON数据或在序列化过程中遇到问题时,提供错误报告。 4. **性能优化**:由于描述中提到解析速度快,这个实现可能包含了一些优化技术,如减少内存分配、缓存重复字符串等。 为了使用...

    through2-jsonwriter:将 JSON 字符串化的简单转换流

    通过2-jsonwriter 将 JSON 字符串化的简单转换流 安装 npm install through2-jsonwriter 或者 npm install --save through2-jsonwriter 用法 var jsonWriter = require ( 'through2-jsonwriter' ) ; var ...

    solidity-json-writer:一个帮助生成和构建用于智能合约开发的 JSON 的库

    Solidity JSON 编写器 一个帮助生成和构建用于智能合约开发的 JSON 的库。... using JsonWriter for JsonWriter.Json; function generateJSON () external pure returns ( string memory ) { JsonWri

    Java读写json文件需要引用的jar包

    public class JsonWriter { public static void main(String[] args) { JSONObject jsonObject = new JSONObject(); jsonObject.put("key1", "value1"); jsonObject.put("key2", "value2"); try (FileWriter ...

    LitJson源码

    这个压缩包包含的是LitJson的官方源码,经过反编译后,方便开发者进行深度定制或解决特定问题。 在源码中,我们可以看到主要的类`JsonMapper`,它是整个库的核心,负责将JSON字符串转换为.NET对象,反之亦然。`Json...

    基于C#实现的对Json进行格式化字符串解析的.NET类库源码V3.0

    本项目“基于C#实现的对Json进行格式化字符串解析的.NET类库源码V3.0”提供了一个自定义的解决方案,以帮助开发者更方便地处理JSON数据。 C#中处理JSON的标准库是Newtonsoft.Json(也称为Json.NET),它是一个功能...

    转载 xStream完美转换XML、JSON

    JsonWriter jsonWriter = new JsonWriter(quickWriter, JsonWriter.DETACHED_ROOT_MODE); jsonWriter.startObject(); jsonWriter.setValue((String) source); jsonWriter.endObject(); } @Override public ...

    LitJson不转义源码

    在处理JSON字符串时,通常会遇到字符转义的问题。例如,双引号(")在JSON字符串中必须使用反斜杠(\)进行转义,变成\"。然而,“不转义”在这里可能意味着LitJson在某些特定情况下不会对所有特殊字符进行标准的...

    Java JsonReader, JsonWriter and Schema:具有JsonSchema支持的Json Reader和Writer库-开源

    从文件或流中读取和写入JSON数据。 通过JsonSchema进行验证(有关规范,请参见http://json-schema.org)

    dataxV202210的所有writer插件

    DataX是阿里巴巴开源的一款高效、稳定、扩展性强的数据同步工具,用于在各种...无论是传统的数据库、现代的大数据平台,还是云服务和消息队列,都有对应的解决方案,为企业和开发者提供了强大的数据迁移和整合能力。

    android-Gson方法大合集demo

    在Android开发中,Gson库是一个非常重要的工具,它由Google提供,用于在Java对象和JSON数据之间进行映射。本资源"android-Gson方法大合集demo"显然...对于学习和调试Gson相关问题,这个资源无疑是一份宝贵的参考资料。

    Json.net for .net3.5

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT...

    LitJson库文件源码

    它包含了几个关键的类,如JsonMapper、JsonReader和JsonWriter,这些类提供了从JSON字符串到C#对象以及从C#对象到JSON字符串的转换功能。 1. **JsonMapper**: 这是LitJson库的核心,提供了一种简单的方式来映射JSON...

    fastJSON文档

    JSONWriter jsonWriter = new JSONWriter(writer); jsonWriter.object(); // 写入键值对... jsonWriter.endObject(); String jsonString = writer.toString(); ``` 4. **过滤器与转换器** 可以使用过滤器和...

Global site tag (gtag.js) - Google Analytics