`
hewiser
  • 浏览: 9719 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

Json-lib 与 hibernate 共同使用的问题

阅读更多
Posted by: Andres Almiray on 05/01/2008 原文

hibernate使用CGLIB把POJO的domain对象动态代理,实现它的魔法,但是给JSON的序列化带来了麻烦,因为JSON无法对lazy的属性进行序列化。有以下的四个方法可以解决hibernate的序列化问题

  1. domain类实现JSONString接口
  2. 建立JsonConfig实例,并配置属性排除列表
  3. 用属性过滤器
  4. 写一个自定义的JsonBeanProcessor

1. 实现JSONString接口是侵入性最强的方法

public class Person implements JSONString {
   private String name;
   private String lastname;
   private Address address;
 
   // getters & setters
 
   public String toJSONString() {
      return "{name:'"+name+"',lastname:'"+lastname+"'}";
   }
}

 

 

2.第二种方法通过jsonconfig实例,对包含和需要排除的属性进行方便添加删除

public class Person {
   private String name;
   private String lastname;
   private Address address;
 
   // getters & setters
}
 
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExclusions( new String[]{ "address" } );
Person bean = /* initialize */;
JSON json = JSONSerializer.toJSON( bean, jsonConfig );

 

 

注意:这种方法不区分目标类,就是说如果有2个bean当中都存在“address”属性,那么采用这种方法,这两个bean中的address属性都将被排除

3. 使用propertyFilter可以允许同时对需要排除的属性和类进行控制,这种控制还可以是双向的,也可以应用到json字符串到java对象

 

public class Person {
   private String name;
   private String lastname;
   private Address address;
 
   // getters & setters
}
 
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setJsonPropertyFilter( new PropertyFilter(){
   public boolean apply( Object source, String name, Object value ){
      // return true to skip name
      return source instanceof Person && name.equals("address");
   }
});
Person bean = /* initialize */;
JSON json = JSONSerializer.toJSON( bean, jsonConfig )

 

4. 最后来看JsonBeanProcessor,这种方式和实现JsonString很类似,返回一个代表原来的domain类的合法JSONOBJECT

public class Person {
   private String name;
   private String lastname;
   private Address address;
 
   // getters & setters
}
 
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonBeanProcessor( Person.class,
   new JsonBeanProcessor(){
      public JSONObject processBean( Object bean, JsonConfig jsonConfig ){
         if( !(bean instanceof Person) ){
            return new JSONObject(true);
         }
         Person person = (Person) bean;
         return new JSONObject()
            .element( "name", person.getName() )
            .element( "lastname", person.getLastname() );
      }
});
Person bean = /* initialize */;
JSON json = JSONSerializer.toJSON( bean, jsonConfig );

 

分享到:
评论

相关推荐

    json-lib-2.3-jdk15基础jar包合辑

    - **数据存储**:在持久化框架如Hibernate中,JSON Lib可以用于将Java对象转换成JSON字符串,方便存储到数据库的JSON字段。 - **前端交互**:后端开发中,通过JSON格式与前端JavaScript进行数据交互,JSON Lib简化了...

    ezmorph-1.0.6.jar和json-lib-2.2.2-jdk15.rar

    - **版本与JDK兼容性**:"json-lib-2.2.2-jdk15"表明这个版本的json-lib是针对JDK 1.5编译的,这意味着它可以运行在支持JDK 1.5及更高版本的Java环境中。 - **功能**:json-lib提供了一系列的API,可以将Java对象...

    json-lib-2.4的jar包.zip

    3. **XML与JSON之间的转换**:`json-lib`还支持XML和JSON之间的互换,这对于需要在XML和JSON之间进行数据转换的应用程序特别有帮助。 4. **支持多种Java框架**:`json-lib`兼容多种Java框架,如Spring、Hibernate等...

    json-lib-2.3-jdk15.jar和它的源码包

    2. **与Hibernate集成**:json-lib可以方便地将Hibernate的实体对象转换为JSON,这对于开发基于RESTful API的Web应用非常有用。 3. **自定义转换策略**:可以通过实现`net.sf.json.JSONObject$BeanProcessor`接口...

    json-lib所需全部jar包

    例如,如果你的项目使用了Hibernate,那么可能还需要添加Hibernate的JSON支持,这可能涉及到额外的JAR文件。同时,为了保证项目的运行,还需要确保你的类路径中包含了所有必要的库。 对于日志处理,虽然commons-...

    json-lib-2.4-jdk15

    json-lib 与其他Java框架如Spring、Hibernate等有良好的集成,可以方便地在这些框架中处理JSON数据,提高开发效率。 5. **版本兼容性** "json-lib-2.4-jdk15" 版本特别强调了与JDK 1.5的兼容性,这意味着即使在较...

    json-lib-2.2.3-jdk15.jar有关文件

    6. **与其他技术集成**:`json-lib`可以方便地与Spring框架、Hibernate ORM等集成,进一步提升开发效率。 7. **依赖管理**:使用`json-lib-2.2.3-jdk15.jar`可能需要其他依赖项,这些依赖通常会包含在项目的类路径...

    json-lib-2.4-jdk15及其依赖jar包.rar

    6. **与其他技术集成**:`json-lib`可以与Spring框架、Hibernate等无缝集成,简化JSON与数据库或服务之间的交互。 在实际开发中,确保正确引入所有依赖的jar包,避免出现“ClassNotFoundException”或...

    json-2.2.3-jdk13全部包6个

    "json-lib"核心包包含了JSON解析、序列化和反序列化的基本功能,而其他五个依赖包可能是为了提供额外的支持,例如与其他数据格式(如XML、Hibernate对象等)之间的转换,或者提供更高效的解析和生成机制。...

    json-lib相关联的所有包

    5. 配合其他Java库:json-lib与许多其他Java库兼容,如Hibernate、Spring等。这使得在这些框架中使用JSON时,可以无缝集成json-lib进行数据序列化和反序列化。 6. 性能优化:虽然json-lib在性能上可能不如现代的...

    gson,fastJson,json-lib实例

    json-lib是一个针对多种Java类库的JSON处理器,包括Hibernate、Spring、EJB等。它的特点是兼容性好,可以方便地处理各种Java集合和自定义类型。然而,相比Gson和FastJson,json-lib的更新较慢,性能可能稍逊一筹。...

    json-lib-2.4

    7. **与其他库的兼容性**:JSON-Lib设计时考虑了与其他Java库的兼容性,例如它可以与Spring框架、Hibernate等无缝集成,方便在大型项目中使用。 8. **文档与社区支持**:JSON-Lib拥有详细的API文档和活跃的开发者...

    json-lib 导入所需要的6个jar 包

    - 使用json-lib时需注意版本兼容性,确保所使用的jar包版本与项目中其他依赖库匹配。 - 考虑性能因素,对于大量数据的转换,可能需要评估是否选用更高效的JSON库,如Jackson或Gson。 - 对于复杂的Java对象结构,可能...

    Json-lib的六个jar包

    总结来说,Json-lib的六个JAR包共同构成了一个强大的JSON处理工具集,涵盖了JSON与Java对象之间的相互转换、数据类型转换、集合操作以及日志记录等功能,极大地简化了Java开发者处理JSON数据的工作。在Web服务、...

    json-lib json工具包

    4. **与其他Java库的兼容性**:json-lib可以与其他流行Java库如Hibernate、Spring等无缝集成,方便开发人员在现有的项目中使用JSON功能。 5. **性能优化**:json-lib通过优化的算法和数据结构提高了JSON操作的性能...

    json-lib.rar 完整的,经测试了

    6. **社区支持**:作为一个成熟的开源项目,`json-lib`背后有一个活跃的开发社区,提供持续的更新和问题解决,用户可以在遇到问题时获得帮助。 在`json-lib.rar`压缩包中,包含的文件可能是`json-lib`的源码、编译...

    json-lib 所需jar包

    5. **与其他技术集成**:`json-lib`可以很好地与Spring框架、Hibernate等集成,方便在这些框架中处理JSON数据。 总的来说,`json-lib`作为一个强大的JSON处理库,提供了丰富的API供开发者使用。通过理解和掌握它的...

    json-lib方式的包

    4. **兼容性**:json-lib支持多种Java技术框架,如Hibernate、EJB3和JaxB,可以方便地在这些框架中使用JSON。 5. **性能优化**:json-lib经过优化,可以处理大规模数据,提高了数据转换的效率。 在使用json-lib时...

    json-lib及其关连的JAR

    6. **错误处理**:在转换过程中遇到问题时,JSON-lib会抛出相应的异常,帮助开发者调试和解决问题。 JAR(Java Archive)是Java平台的标准打包格式,用于收集多个类文件和相关的元数据到一个文件中,便于分发和部署...

    json-lib-2.4及其全部依赖jar包

    总的来说,`json-lib-2.4`是一个方便的Java库,用于处理JSON数据,它与多个版本的JDK兼容,并且已经包含了所有必要的依赖,使得集成和使用变得简单。对于那些需要在Java项目中进行JSON操作的开发者来说,这是一个...

Global site tag (gtag.js) - Google Analytics