【fastJSON】利用fastJSON处理循环引用的问题
下载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处理循环引用的问题的更多相关文章
- Atitit.json xml 序列化循环引用解决方案json
Atitit.json xml 序列化循环引用解决方案json 1. 循环引用1 2. 序列化循环引用解决方法1 2.1. 自定义序列化器1 2.2. 排除策略1 2.3. 设置序列化层次,一般3级别 ...
- 使用gc、objgraph干掉python内存泄露与循环引用!
Python使用引用计数和垃圾回收来做内存管理,前面也写过一遍文章<Python内存优化>,介绍了在python中,如何profile内存使用情况,并做出相应的优化.本文介绍两个更致命的问 ...
- 【FastJSON】解决FastJson中“$ref 循环引用”的问题
0.开发环境 SSH,EasyUI,MySQL 1.需求要求: (1)首先获取所有的贷款订单数据,即List <LoanOrder>. (2)然后从单个贷款订单实体LoanOrder去访问 ...
- Samples DataBind FastJson循环引用问题
Fastjson full support databind, it's simple to use. Encode import com.alibaba.fastjson.JSON; Group g ...
- FastJson禁用循环引用检测
我们先来看一个例子: package com.elong.bms; import java.io.OutputStream; import java.util.HashMap; import java ...
- 解决FastJson循环引用的问题
temp 本来被循环引用,运行方法报错. 解决方法:对temp进行处理 SerializerFeature feature = SerializerFeature.DisableCircularRef ...
- 利用Fastjson注入Spring内存马
此篇文章在于记录自己对spring内存马的实验研究 一.环境搭建 搭建漏洞环境,利用fastjson反序列化,通过JNDI下载恶意的class文件,触发恶意类的构造函数中代码,注入controller ...
- 【踩坑】利用fastjson反序列化需要默认构造函数
利用 fastjson等 反序列化时需要注意,他可能会用到 默认的构造函数,如果没有默认构造函数,某些场景下可能会出现 反序列化熟悉为空的情况,如下图所示:
- Java基础/利用fastjson反序列化json为对象和对象数组
利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...
- Java基础/利用fastjson序列化对象为JSON
利用fastjson序列化对象为JSON 参考博客:http://blog.csdn.net/zeuskingzb/article/details/17468079 Step1:定义实体类 //用户类 ...
随机推荐
- ICTPOS3.0 词性标注集
Ag 形语素 形容词性语素.形容词代码为a,语素代码g前面置以A. a 形容词 取英语形容词adjective的第1个字母. ad 副形词 直接作状语的形容词.形容词代码a和副词代码d并在一起. an ...
- 前趋图和PV操作
- node自动调试
supervisor 第一步:安装:npm -g install supervisor没有权限的时候可以sudo npm -g install supervisor 第二步:使用:supervisor ...
- Laravel通过Swoole提升性能
1.安装配置laravel 1.1.composer下载laravel composer create-project --prefer-dist laravel/laravel blog " ...
- 在网站中嵌入VideoJs视频播放器
一个博客难免需要引用视频来说明内容,但想要自己来实现一个视频播放器是不是一时半会就能完成的,更重要的是这需要对视频播放技术有一定的了解.于是自然而然的有人会想到开源项目.一个不错的选择便是video. ...
- SGU 289. Challenging Tic-Tac-Toe
注意一个问题就是不合法状态的判定.一个是点数不对,一个是X赢了,但是0接着下了一个子,一个是0赢了,但X也接着下了子,判断一下就行了. 做法是直接搜索,然后调参数...比较难懂的说. #include ...
- 六十六 aiohttp
asyncio可以实现单线程并发IO操作.如果仅用在客户端,发挥的威力不大.如果把asyncio用在服务器端,例如Web服务器,由于HTTP连接就是IO操作,因此可以用单线程+coroutine实现多 ...
- php获取不到url问号之后的参数
url规则已定义: RewriteRule ^/member/editprivilege/([0-9]+) /access.php?_u=mobile/editprivilege&aid=$1 ...
- LOJ #6284. 数列分块入门 8-分块(区间查询等于一个数c的元素,并将这个区间的所有元素改为c)
#6284. 数列分块入门 8 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2 题目描述 给出 ...
- 《深入理解Android2》读书笔记(八)
接上篇<深入理解Android2>读书笔记(七) AMS中的进程管理 AMS对进程的管理仅涉及两个方面 1.调节进程的调度优先级和调度策略 2.调节进程的oom值 调度优先级和调度策略 1 ...