1. 程式人生 > >fastjson序列化hibernate持久化物件時忽略代理的懶載入物件

fastjson序列化hibernate持久化物件時忽略代理的懶載入物件

過濾懶載入代理物件(該端程式碼原文地址找不到了)

package com.pbh.filter;

import org.hibernate.collection.spi.PersistentCollection;
import org.hibernate.proxy.HibernateProxy;
import org.hibernate.proxy.LazyInitializer;

import com.alibaba.fastjson.serializer.PropertyFilter;

/**
 * 
 * Description: 過濾Hibernate懶載入不能序列化物件
 * @author
PanBaihui * @time 2017年9月15日 下午4:15:45 */
public class SimplePropertyFilter implements PropertyFilter { @Override public boolean apply(Object object, String name, Object value) { if (value instanceof HibernateProxy) {//hibernate代理物件 LazyInitializer initializer = ((HibernateProxy) value).getHibernateLazyInitializer(); if
(initializer.isUninitialized()) { return false; } } else if (value instanceof PersistentCollection) {//實體關聯集合一對多等 PersistentCollection collection = (PersistentCollection) value; if (!collection.wasInitialized()) { return
false; } Object val = collection.getValue(); if (val == null) { return false; } } return true; } }

通用實現

public class ComplexPropertyPreFilter implements PropertyFilter {  
    private Map<Class<?>, Set<String>> includeMap = new HashMap<Class<?>, Set<String>>();  
    //@Override  
    public boolean apply(Object source, String name, Object value) {  
        for(Entry<Class<?>, Set<String>> entry : includeMap.entrySet()) {  
            Class<?> class1 = entry.getKey();  
            if(source.getClass() == class1){  
                Set<String> fields = entry.getValue();  
                for(String field : fields) {  
                    if(field.equals(name)){  
                        return false;  
                    }  
                }  
            }  
        }  
        return true;  
    }  

    public ComplexPropertyPreFilter(Map<Class<?>, Set<String>> includeMap){  
        this.includeMap = includeMap;  
    }  
} 

相關推薦

fastjson序列hibernate持久化物件忽略代理載入物件

過濾懶載入代理物件(該端程式碼原文地址找不到了) package com.pbh.filter; import org.hibernate.collection.spi.PersistentCollection; import org.hibernate.p

fastjson序列hibernate代理和延遲載入物件出現no session異常的解決辦法

fastjson序列化hibernate代理和延遲載入物件出現org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.eecn.ware

Fastjson 序列,反序列Map物件排序問題(字串轉map,map轉字串)

背景 記錄專案中遇到的 關於fastjson jsonobject轉string亂序,string轉jsonObject亂序問題的解決方案 fastJson issues 問題來源描述參見: https://github.com/alibaba/fastjson/issues/359

使用Fastjson序列與反序列物件

public class JSONobject { private String obj; private String color; public String getObj() { return obj; } public void setObj

關於資料序列(3),JSON的方式,FastJson序列物件和List集合示例

JSON也是物件序列化的一種方式 1. 示例 public class FriendLikeVO { public String sn; public int score; public long time; p

DataContractJsonSerializer序列時間類型轉換為UTC溢出問題

設置 arr AD toa C# exception default AR AC 問題描述 如下一個實體類,含有非空時間類型屬性,默認是C#的最小時間,在使用DataContractJsonSerializer將該類對象序列化成JSON時,拋出異常信息:System.Run

FastJson序列

json序列化 tin sonar code 序列化 dex utils sta art String post = HttpClientUtils.httpPost(martinUrl + "index/status",new HashMap<>());

Perl資料序列持久化(入門):Storable模組

Perl提供了一個Storable模組,用來對資料結構進行序列化(serialization,Perl中稱為凍結),也就是將資料結構儲存為二進位制資料。 序列化後的資料可以寫入檔案實現持久化,可以將持久化檔案拷貝給遠端機器 也可以通過網路套接字將序列化資料傳遞給遠端機器 序列化後的資料在任意機器上都可以反

fastjson序列將Null設定為空字串""等問題

fastjson序列化將Null設定為空字串""等問題 Spring Boot使用FastJson解析JSON資料的方法 Spring Boot預設使用json格式從後臺返回資料給前臺,當返回的String型別或者List<>型別資料為null時,我們希望返回的是""

關於fastjson序列不可見特殊字元存在的bug

相關博文連結:http://i.dotidea.cn/2014/08/fastjson-serialize-overflow/ 連結摘自某位大神,自己做個備忘 fastjson 1.1.39版本以下(

fastJson序列和反序列 中空字串的處理

  json在我們開發的過程中被大量的使用,有的時候我們需要在序列化和反序列化的時候對某些欄位或者某種型別的值做特殊對待。比如有時候沒有值的數值型別預設值是0,或者序列化的時候為了節省空間把空值給過濾掉,還有的用於restful的介面的時候會需要把空欄位序列化出

Fastjson序列和反序列的時候日期處理

序列化1.序列化日期為ISO-8601日期格式 2.序列化日期為指定格式 3.用預設的全域性日期格式序列化物件public class Ao { private int id; priv

解決fastjson序列亂序的問題

簽名的時候遇到了一個坑就是要簽名一些風控引數。簽出的字串和前段傳給第三方的在順序上有問題。導致了簽名一直失敗。於是找了很多能讓jsonobject解析後儲存不亂序的方法。 1、先把jsonobject轉成map,把map進行字典排序 2、JSONObject.parseOb

Java-序列持久化和壓縮

1. 序列化的作用    將物件變成一串位元組流      不用序列化能否儲存磁碟上?   可以,但是你要將物件中一個個的基本屬性進行寫入操作,比如int之流, 當然,   按你自己希望的順序,.      序列化和持久化之間的關係   序列化過程是持久化的一種方式,當然

Java序列持久化

參考了菜鳥教程 和 天涼好個秋 什麼是Java序列化 Java 提供了一種物件序列化的機制,該機制中,一個物件可以被表示為一個位元組序列,該位元組序列包括該物件的資料、有關物件的型別的資訊和儲存在物件中資料的型別。 將序列化物件寫入檔案之後,可以從檔案中讀

fastjson序列資料為空的欄位如何處理的問題

背景:今天同事遇到一個問題,介面返回資料的時候空資料欄位的屬性直接被過濾掉了,基於當前問題的解決過程做些手札 解決步驟 1、首先定位問題所在,確定是json資料序列化輸出的時候過濾了屬性值為空的欄位。 2、檢查當前系統原始碼中的json序列化輸出的預設方案

springboot2.x使用redis作為快取(使用fastjson序列的方式,並除錯反序列異常

1.redis是記憶體資料庫,可以單獨作為資料庫(有持久化方案),也可以作為快取(一般為MySQL搭配)        1.1 可以通過jedis,程式碼的方式手動將其傳入redis作為快取;        1.2 也可以通過註解的方式,和spring boo

springboot redis配置Fastjson序列方式

前言專案中由於使用FastJson替換Jackon為預設Json序列化方式,配置redis使用Fastjson進行序列化 序列化配置redis傳入的序列化器必須實現RedisSerializer介面:

為Redis配置自定義fastJson序列工具類

    alibaba.fastjson內部已經提供了對Redis儲存物件序列化的工具類GenericFastJsonRedisS

java建立物件,new 出一個物件 和 = null的區別

首先要明白,java裡物件傳遞的時候,傳遞的都是引用(也就是物件的地址),這比傳遞整個物件高效的多。而基礎型別,int,double等傳遞的才是值。比如,(new ArrayList<String>).add(new String("hello")),jvm只是把