下载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);
}

【fastJSON】利用fastJSON处理循环引用的问题的更多相关文章

  1. Atitit.json xml 序列化循环引用解决方案json

    Atitit.json xml 序列化循环引用解决方案json 1. 循环引用1 2. 序列化循环引用解决方法1 2.1. 自定义序列化器1 2.2. 排除策略1 2.3. 设置序列化层次,一般3级别 ...

  2. 使用gc、objgraph干掉python内存泄露与循环引用!

    Python使用引用计数和垃圾回收来做内存管理,前面也写过一遍文章<Python内存优化>,介绍了在python中,如何profile内存使用情况,并做出相应的优化.本文介绍两个更致命的问 ...

  3. 【FastJSON】解决FastJson中“$ref 循环引用”的问题

    0.开发环境 SSH,EasyUI,MySQL 1.需求要求: (1)首先获取所有的贷款订单数据,即List <LoanOrder>. (2)然后从单个贷款订单实体LoanOrder去访问 ...

  4. Samples DataBind FastJson循环引用问题

    Fastjson full support databind, it's simple to use. Encode import com.alibaba.fastjson.JSON; Group g ...

  5. FastJson禁用循环引用检测

    我们先来看一个例子: package com.elong.bms; import java.io.OutputStream; import java.util.HashMap; import java ...

  6. 解决FastJson循环引用的问题

    temp 本来被循环引用,运行方法报错. 解决方法:对temp进行处理 SerializerFeature feature = SerializerFeature.DisableCircularRef ...

  7. 利用Fastjson注入Spring内存马

    此篇文章在于记录自己对spring内存马的实验研究 一.环境搭建 搭建漏洞环境,利用fastjson反序列化,通过JNDI下载恶意的class文件,触发恶意类的构造函数中代码,注入controller ...

  8. 【踩坑】利用fastjson反序列化需要默认构造函数

    利用 fastjson等 反序列化时需要注意,他可能会用到 默认的构造函数,如果没有默认构造函数,某些场景下可能会出现 反序列化熟悉为空的情况,如下图所示:

  9. Java基础/利用fastjson反序列化json为对象和对象数组

    利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...

  10. Java基础/利用fastjson序列化对象为JSON

    利用fastjson序列化对象为JSON 参考博客:http://blog.csdn.net/zeuskingzb/article/details/17468079 Step1:定义实体类 //用户类 ...

随机推荐

  1. wifi驱动移植

    目标板:Hi3518 内核版本:linux3.0.8   1.修改makefile #PLATFORM = PC //注释掉 PLATFORM = HI3518 //支持平台 ifeq ($(PLAT ...

  2. PHP在变量前面加&是什么意思

    比如: <? php $a = 'c' ; $b = & $a ; //表示$b 和 $a 引用了同一个变量 $a = 'abc' ; //这里重置了$a echo $b ; //将输出 ...

  3. linux命令(17):pwd命令

    1:查看当前工作目录的完整路径命令:pwd 2:目录连接链接时,pwd -P  显示出实际路径,而非使用连接(link)路径:pwd显示的是连接路径: [root@host-172-168-80-55 ...

  4. virtualenv--创建虚拟环境

    一.virtualenv 优点 1.使用不同应用开发环境独立 2.环境升级不影响其他应用,也不会影响全局的python 环境二.安装 pip install virtualenv 三.使用virtua ...

  5. 03 java 基础:注释 关键字 标识符 JShell

    Java 10 中已有 Jshell 工具,方便用户在其中直接输入相关 java 代码. 注释:java 中分为单行注释 //   多行注释 /*   */   文档注释 /**  */ 关键字:在 ...

  6. 文件权限之facl丶文件属性丶特殊权限

    (1)facl:文件的访问控制列表 作用:对象目录或文件可以对不同的用户设定不同的权限 1)getfacl:查看文件或目录的访问控制列表权限 查看 getfacl file/dir acl权限特征:如 ...

  7. 架构设计之NodeJS操作消息队列RabbitMQ

    一. 什么是消息队列? 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象. 消息队列(Message Queue)是一种应用间的通信 ...

  8. gcc、make、makefile、cmake、cmakelists区别

      文章来源:见下!   作者:辉常哥链接:https://www.zhihu.com/question/36609459/answer/89743845来源:知乎著作权归作者所有.商业转载请联系作者 ...

  9. 洛谷P3805 [模板]Manacher算法 [manacher]

    题目传送门 题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入输出格式 输入格式: 一行小写英文字符a,b,c...y,z组成的字符 ...

  10. AutoHotKey 常用脚本

    ; IMPORTANT INFO ABOUT GETTING STARTED: Lines that start with a ; semicolon, such as this one, are c ...