`
hewiser
  • 浏览: 9502 次
  • 性别: 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.4-jdk1.5.chm(英文API)

    json-lib-2.4-jdk1.5帮助文档(英文版)api

    springmvc_hibernate+json lib包

    springmvc_hibernate+json lib包

    json-lib出现There is a cycle in the hierarchy解决办法

    如果需要解析的数据间存在级联关系,而互相嵌套引用,在hibernate中极容易嵌套而抛出net.sf.json.JSONException: There is a cycle in the hierarchy异常。

    java开发jar包

    ehcache,hibernate-lib,json-lib,mybatis-lib,spring-lib,ssh-jar,struts2-lib

    各种lib for Java

    hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.10.Final.jar hibernate-ehcache-4.1.10.Final.jar hibernate-entitymanager-4.1.10.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar ...

    c3p0-0.9.1.2等等

    json-lib-2.3-jdk15-javadoc jta jxl log4j-1.2.11 log4j-1.2.14 portlet-api spring-agent spring-aop spring-beans spring-context spring-core spring-dao spring-hibernate3 spring-ibatis spring-jdbc spring-...

    开源框架jar包(百度云盘)

     · hibernate-distribution-3.5.1-Final-dist.zip  · hibernate-release-4.2.4.Final.zip spring-data-jpa(1.4.2.RELEASE)  · spring-data-jpa-1.4.2.RELEASE-sources.jar  · spring-data-jpa-1.4.2....

    struts2.1.6+spring2.0+hibernate3.2常用配置包

    最近温习ssh2整合编程,顺便浏览下struts2有什么更新的消息,下载了新版本的struts2的2.1.8.1版,使用的是MyEclipse8.0开发,但是问题就随之而来了。MyEclipse8.0中自带的struts2版本是2.1.6,spring版本有2.0,2.5...

    SSHJ Jar包

    JSON解析用的 json-lib.jar XML解析用的 dom4J.jar 一大堆依赖的commons : commons-codec-1.4.jar commons-logging-1.1.3.jar commons-fileupload-1.3.jar commons-io-2.0.1.jar ..... 不一一述说. 注:Spring,...

    常用的jar包

    hibernate-validator-4.2.0.Final.jar, struts2-spring-plugin-2.0.14.jar, struts2-config-browser-plugin-2.3.1.1.jar, struts2-convention-plugin-2.3.1.1.jar, c3p0-0.9.1.2.jar,poi-3.6-20091214.jar, ...

    SSH等jar包

    │ hibernate-tools.jar │ hibernate3.jar │ jta.jar │ junit-4.4.jar │ log4j-1.2.11.jar │ mysql-connector-java-5.1.8-bin.jar │ ojdbc14.jar │ ├─JDBC │ dom4j-1.6.1.jar │ jaxen-1.1-beta-6.jar │...

    spring和hibernate__jar包,详细说明看jar包列表

    json-lib-2.4-jdk15.jar jstl-1.1.2.jar livetribe-jsr223-2.0.6.jar log4j-1.2.16.jar mail-1.4.jar mybatis-3.1.1.jar mysql-connector-java-5.1.18-bin.jar mysql-connector-java-5.1.18.jar org.springframework...

    web项目常用jar包及说明.zip

    如果使用注解还需添加hibernate-annotations-3.4.0.GA包: 11.hibernate-annotations.jar 12.ejb3-persistence.jar 13.hibernate-commons-annotations.jar json需要的jar包: 1.commons-beanutils-1.8.2.jar 2....

    javaweb项目常用jar包

    hibernate-commons-annotations-4.0.5.Final.jar hibernate-core-4.3.8.Final.jar hibernate-jpa-2.1-api-1.0.0.Final.jar httpclient-4.0.jar httpclient-4.1.1.jar httpcore-4.0.jar httpcore-4.1.jar ...

    SSH和easyui整合Demo

    Struts2.3.1Spring3.0.7Hibernate3.3.2 easyui整合Demo,整合Demo中有用到json-lib,项目中的jar包被抽出,jar包csdn上都有

    nutz-1.b.52.zip

    如果一个 Web 应用,你在 WEB-INF/lib 下只 需要放置一个 nutz.jar 就够了 当然你要使用连接池,数据库驱动等功能,还需要自行添置 jar 包。 -------------Nutz 为谁而设计? 如果你觉得 Hibernate 控制比较繁琐,...

    web开发常用jar

    json-lib-2.2.3-jdk15.jar json和java转化的辅助工具 flexjson.jar java到json串的转换 gson-1.3.jar java到json串的转换 ognl-2.6.11.jar OGNL表达式所需要的包,支持EL htmlparser.jar 强大的...

    Spring主流jar包大全

    hibernate-validator-5.2.4.Final.jar imgscalr-lib-4.2.jar jackson-annotations-2.2.3.jar jackson-core-2.2.3.jar jackson-databind-2.2.3.jar jackson-module-jaxb-annotations-2.2.3.jar javaGeom-0.11.1.jar ...

    java开发常用jar包

    json-lib-2.2.3-jdk15.jar json和java转化的辅助工具 flexjson.jar java到json串的转换 gson-1.3.jar java到json串的转换 ognl-2.6.11.jar OGNL表达式所需要的包,支持EL htmlparser.jar 强大的html解析器 ...

    play framework 框架手册 word 版

    [强烈推荐, 文档不多, 很快就可以看完, 看完了, 就会使用play了] 目录 MVC应用程序模型 - 7 - app/controllers - 8 - app/models - 8 - app/views - 8 - 请求生命周期 - 8 - 标准应用程序布局layout - 9 - app...

Global site tag (gtag.js) - Google Analytics