`
周禄康
  • 浏览: 161035 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

json解决hibernate中级联对象延迟加载问题

阅读更多

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 );

from:http://hewiser.iteye.com/category/87722?show_full=true

 

分享到:
评论

相关推荐

    json转对象 json转对象json转对象 json转对象 json转对象 json转对象

    json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象...

    【北大青鸟内部教程】jsp中关于Hibernate延时加载的问题

    本文将深入探讨在JSP(JavaServer Pages)环境中,如何理解和应对Hibernate的延时加载问题。 首先,我们需要了解什么是延时加载。延时加载是指当实体对象的某个关联属性没有被立即加载,而是等到第一次访问该属性时...

    json字符串转换c++类对象

    通过Visual Studio或其他IDE打开解决方案,编译并运行,以验证JSON字符串到C++类对象的转换是否成功。 总的来说,将JSON字符串转换为C++类对象需要选择合适的JSON库,设计类结构来映射JSON键值,解析JSON字符串,并...

    json转对象数组与对象数组转json --Java

    ### JSON转对象数组与对象数组转JSON(Java) 在Java编程语言中,处理JSON数据时经常需要进行JSON字符串与Java对象之间的转换。特别是在涉及到数组或集合的场景下,这种转换显得尤为重要。本文将详细介绍如何使用...

    json格式与java类对象相互转换

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于前后端交互,而Java作为后端开发的主要语言,常常需要将JSON格式的数据与Java类对象进行相互转换,以便于数据的处理和传输。Jackson库是...

    Vue加载json文件的方法简单示例

    本文实例讲述了Vue加载json文件的方法。分享给大家供大家参考,具体如下: 一、在build/dev-server.js文件里 var app = express() 这句代码后面添加如下(旧版): var appData = require('../address.json'); // ...

    json2.js 字符串转转json对象工具

    总的来说,json2.js是解决JSON处理兼容性问题的一个工具,它提供了一种安全且标准化的方式来在JavaScript中进行JSON字符串与对象之间的转换,尤其对于那些不支持原生JSON操作的老版本浏览器而言。

    JSON.rar_JSON Hibernate_extjs_json struts ext_jsp json extjs_str

    在这个项目中,开发者可能会遇到如何配置Struts2的JSON结果类型、如何在Hibernate中序列化和反序列化JSON对象、如何在ExtJS中解析和展示JSON数据等问题。理解并熟练掌握这些技术的集成和使用,对于开发高效、响应式...

    html读取json数据百度地图api加载json数据加载marker图标

    html读取json数据百度地图api加载json数据加载marker图标

    json转对象(java 多级嵌套)

    总结,Java中处理JSON到对象的转换,特别是面对多级嵌套的情况,关键在于理解JSON结构并构建相应的Java对象模型,然后利用如Jackson这样的库进行数据映射。通过熟练掌握这些工具和技巧,可以有效地在Java应用中处理...

    three.js加载json三维模型.zip

    加载JSON模型到Three.js通常分为两个步骤:加载模型数据和创建3D对象。 1. 加载模型数据: 使用Three.js内置的`Loader`类,例如`JSONLoader`,可以异步加载JSON文件。首先,创建一个`JSONLoader`实例,然后调用其`...

    JSON--List集合转换成JSON对象详解

    以上知识点,不仅包括了将List集合转换为JSON对象的基本方法,还涉及到了在实际开发中可能遇到的问题及其解决方法,包括对特定框架和库的使用,对敏感数据的过滤等。掌握了这些知识点,对于进行Web开发和数据交换的...

    bootstrap-table动态加载json数据并且支持分页

    在这个例子中,`data-url`属性指向了包含JSON数据的文件路径,`data-field`属性对应JSON对象的键,用于映射列的数据。 接下来,我们将探讨如何动态加载JSON数据。Bootstrap Table支持通过Ajax方式从服务器获取数据...

    java对象转JSON

    1.一款将java对象转成json或是将json转成java对象的jar文件; 2.在网上找了半天才找到,希望大家共享; 3.使用方法,大家在网上随便找,很多,很简单,一看便会; 4.此包在eclipse中和AndroidStudio中都可以用,但是,你如果...

    json工具类,json转对象转map对象转json

    json工具类,json转为对象,json转map。对象转json。便于使用

    Android服务器解析json数据实现下拉刷新上拉加载ListView显示

    这个"Android服务器解析json数据实现下拉刷新上拉加载ListView显示"的示例项目,就是针对这一场景提供了一个完整的解决方案。以下是关于这个项目的关键知识点的详细说明: 1. JSON数据解析: JSON(JavaScript ...

    Unity资源导出成json文件供网页加载

    在本场景中,我们探讨的是如何将Unity的资源导出为JSON文件,以便在WebGL环境中,如ThreeJS或AFrame中加载和展示。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...

    struts2+extjs2.1+json+hibernate+spring

    上网找资料,都是一些不全的. struts2+extjs2.1+json+hibernate+spring 自己整合的例子. 当中hibernate数据源可以配置自己的.后台输送json 前台接收.

    json与对象相互转换系列处理

    - 安全性问题:在处理用户输入的JSON时,应确保进行适当的验证和清理,防止JSON注入攻击。 了解并熟练掌握JSON与对象的转换对于开发人员来说至关重要,无论是在服务器端处理HTTP请求,还是在前端进行数据交互,都...

    C# json格式解析,Json格式字符串与C#对象相互转换,类库+使用案例,注释详细

    C# json格式转换,Json格式字符串与C#对象相互转换,类库和测试demo 写了一个json与C#对象相互装换的类库,直接调用就行,有测试案例,代码注释非常详细 部分方法: /// 将Json字符串解析为C#中的对象 /// Json格式...

Global site tag (gtag.js) - Google Analytics