解决因为hibernate的懒加载引起的json 序列化失败的问题

来源:互联网 发布:sai软件下载官方下载 编辑:程序博客网 时间:2024/04/24 14:40

在使用hibernate的过程中,  对于某些关联的属性对象 有进行懒加载的操作,   这时如果存在懒加载的对象,进行json序列化的时候,会报错。

可以使用一个过滤器,进行 过滤不需要被序列化的属性,主要是应用于Hibernate的代理和管理。


代码如下

package com.lazyant.util;import org.hibernate.collection.spi.PersistentCollection;import org.hibernate.proxy.HibernateProxy;import org.hibernate.proxy.LazyInitializer;import com.alibaba.fastjson.serializer.PropertyFilter;public class HibernatePropertyFilter implements PropertyFilter {/** * 过滤不需要被序列化的属性,主要是应用于Hibernate的代理和管理。 * @param object 属性所在的对象 * @param name 属性名 * @param value 属性值 * @return 返回false属性将被忽略,ture属性将被保留 */@Overridepublic 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;}}

在需要json序列化前,先实例化该对象

例如

        HibernatePropertyFilter filter = new HibernatePropertyFilter();        List<Order> orderList = orderService.findList(status, user.getId(), null);        String jsonString = JSON.toJSONString(orderList, filter, SerializerFeature.DisableCircularReferenceDetect);

备注:  使用 SerializerFeature.DisableCircularReferenceDetect 的目的在于  解决 FastJSON中 "$ref 循环引用"的问题

具体可看 解决FastJson中“$ref 循环引用”的问题 



1 0
原创粉丝点击