【fastJSON】利用fastJSON处理循环引用的问题

简介: 下载fastJSON jar   com.alibaba.fastjson 第一种:【写死的】将需要序列化的字段传递进去,得到结果//需要序列化的实体+字段 SimplePropertyPreFilter filter = new SimplePropertyPreFilter(Member.

下载fastJSON jar   com.alibaba.fastjson

 

第一种:【写死的】

将需要序列化的字段传递进去,得到结果

//需要序列化的实体+字段
        SimplePropertyPreFilter filter = new SimplePropertyPreFilter(Member.class,"字段1","字段2","可变字符串数组" );
        String result = JSON.toJSONString(Member.class, filter);

 

第二种:【可以复用灵活】

Map保存类对象+此对象所有的字段

传进来需要阻隔的字段

 

 

package net.shopxx.ws.utils;

import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.serializer.PropertyFilter;

public class JSONExUtils implements PropertyFilter {
    
    //需要处理序列化阻隔的实体+实体所有的字段
    private Map<Class<?>, String[]> excludes = new HashMap<Class<?>, String[]>();
    
    /**
     * apply 方法 返回true表示需要序列化   
     * 参数2  不需要序列化的字段【属性】
     * 参数3  实体
     */
    @Override
    public boolean apply(Object object, String paramerter, Object entity) {
        //对象为NULL 直接放行
        if(entity == null){
             return true;
        }
        
        //获取需要序列化的 类对象
        Class<?> clazz = entity.getClass();
        
        //查找不需要序列化的字段
        for (Map.Entry<Class<?>, String[]> exItem : this.excludes.entrySet()) {
            // isAssignableFrom()  用来判断类型间是否有继承关系
            if(exItem.getKey().isAssignableFrom(clazz)){
                //不需要序列化的字段包含在所有字段中 下标>1   返回false
                return -1 != Arrays.binarySearch(exItem.getValue(), paramerter);
            }
        }
        return true;
    }
    
    public void setExcludes(Class<?> cls, String...properties) {
        excludes.put(cls, properties);
    }

    public Map<Class<?>, String[]> getExcludes() {
        return excludes;
    }

    public void setExcludes(Map<Class<?>, String[]> excludes) {
        this.excludes = excludes;
    }
    
    
    //获取本对象所有的属性  暂时没用
    public String[] just4Paramerters(Class<?> object){
        Field[] fields = object.getDeclaredFields();
        StringBuffer buffer = new StringBuffer();
        for (Field field : fields) {
            buffer.append(field.getName()+",");
        }
        if(buffer.length() > 0){
            String[] paramerters = buffer.toString().split(",");
            return paramerters;
        }
        return null;
    }
    
}

 

 

然后在需要使用的地方 调用即可!!

public void testName(){
        JSONExUtils exUtils = new JSONExUtils();
        exUtils.setExcludes(Member.class, new String[]{"需要阻隔的字段"});
        String result = JSON.toJSONString("", exUtils);
    }

 

相关文章
|
JSON 算法 fastjson
com.alibaba.fastjson转换JSONObject数据后顺序与原JSON字符串顺序不一致原因分析
Json字符串转JSONObject对象保证属性及其内部JSONObject有序(本身顺序而非需要指定排序)
2197 1
|
4月前
|
JSON fastjson 数据格式
【各种**问题系列】FastJSON 泛型对象解析
解析 JSON,并将其转换为对应的数据结构。转换普通对象时,可以直接使用 Class 实例进行直接转换
|
5月前
|
JSON 前端开发 fastjson
fastjson全局序列化坑
fastjson全局序列化坑
43 0
|
5月前
|
缓存 前端开发 Java
【Netty官方文档翻译】引用计数对象(reference counted objects)
【Netty官方文档翻译】引用计数对象(reference counted objects)
48 0
|
5月前
|
JSON 算法 Java
Java常用的几个Json库
Java常用的几个Json库
|
7月前
|
Java
Java优雅解决空指针问题源码级别刨析Optional 2
Java优雅解决空指针问题源码级别刨析Optional
41 0
|
7月前
|
安全 Java
Java优雅解决空指针问题源码级别刨析Optional 1
Java优雅解决空指针问题源码级别刨析Optional
31 0
|
8月前
|
安全 Java UED
深入刨析Java-ArrayList的Fail-Fast机制
本文将深入剖析Fail-Fast机制的原理,并结合代码示例演示如何正确处理并发修改问题,确保Java应用程序的稳定性和可靠性。
|
11月前
|
Dubbo Java 应用服务中间件
再谈序列化之rpc调用失败和jackson序列化时不允许Map中的key为null
再谈序列化之rpc调用失败和jackson序列化时不允许Map中的key为null
184 0
|
存储 JSON 前端开发
解决FastJson中“$ref 循环引用检测”的问题的几种方式
解决FastJson中“$ref 循环引用检测”的问题的几种方式
694 0
解决FastJson中“$ref 循环引用检测”的问题的几种方式

热门文章

最新文章