静态工厂类
package com.pbh.filter;
import com.alibaba.fastjson.serializer.PropertyFilter;
/**
*
* Description: 过滤序列化属性静态工厂类
* @author PanBaihui
* @time 2017年9月19日 下午2:14:36
*/
public class PropertyFilterFactory {
/**
*
* @Description:懒加载对象过滤
* @author PanBaihui
* @time 2017年9月19日 下午5:47:44
* @return PropertyFilter
*/
public static PropertyFilter SimplePropertyFilter() {
return new SimplePropertyFilter();
}
/**
*
* @Description:代理对象过滤
* @author PanBaihui
* @time 2017年9月19日 下午2:20:06
* @return PropertyFilter
*/
public static PropertyFilter CarSubBrandSimplePropertyFilter() {
return new CarSubBrandSimplePropertyFilter();
}
/**
*
* @Description:车型过滤
* @author PanBaihui
* @time 2017年9月19日 下午2:19:50
* @return PropertyFilter
*/
public static PropertyFilter CarTypeSimplePropertyFilter() {
return new CarTypeSimplePropertyFilter();
}
}
接口实现类
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: 序列化时忽略代理的懒加载对象
* @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;
}
}
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;
import com.lianshangche.model.car.CarSeries;
import com.lianshangche.model.car.CarSubBrand;
/**
*
* Description: 过滤Hibernate懒加载不能序列化对象
* @author PanBaihui
* @time 2017年9月15日 下午4:15:45
*/
public class CarSubBrandSimplePropertyFilter implements PropertyFilter {
private Class<CarSubBrand> className = CarSubBrand.class;
private Class<CarSeries> carSeriesClassName = CarSeries.class;
private String [] propertieNames = {"remark", "enable"};
@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;
}
}
if (object.getClass().equals(className)||object.getClass().equals(carSeriesClassName)) {//非序列化判断
for (String propertie : propertieNames) {
if (name.equals(propertie)) {
return false;
}
}
}
return true;
}
}
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;
import com.lianshangche.model.car.CarType;
/**
*
* Description: 过滤Hibernate懒加载不能序列化对象
* @author PanBaihui
* @time 2017年9月15日 下午4:15:45
*/
public class CarTypeSimplePropertyFilter implements PropertyFilter {
private Class<CarType> className = CarType.class;
private String [] propertieNames = {"yearType", "sizeType", "saleState", "enable", "price"};
@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;
}
}
if (object.getClass().equals(className)) {//非序列化判断
for (String propertie : propertieNames) {
if (name.equals(propertie)) {
return false;
}
}
}
return true;
}
}