【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:定义实体类 //用户类 ...
随机推荐
- mybaits-spring demo 记
代码:https://github.com/bobby96333/demo_spring_batis /pom.xml <?xml version="1.0" encodin ...
- linux 系统调用fork()
头文件: #include<unistd.h> #include<sys/types.h> 函数原型: pid_t fork( void); (pid_t 是一个宏定义,其实质 ...
- 使用Storm实现实时大数据分析(转)
原文链接:http://blog.csdn.net/hguisu/article/details/8454368 简单和明了,Storm让大数据分析变得轻松加愉快. 当今世界,公司的日常运营经常会生成 ...
- windows7配置python和django的开发环境
直接上图,这是我在我的电脑配置windows7python和django开发环境的所有用到的软件 要求不高,只需要这几个软件的版本相一致就行, 需要注意的是软件安装时需要统一是32位或者64位的软件, ...
- POJ 1456 Supermarket(贪心+并查集)
题目链接:http://poj.org/problem?id=1456 题目大意:有n件商品,每件商品都有它的价值和截止售卖日期(超过这个日期就不能再卖了).卖一件商品消耗一个单位时间,售卖顺序是可以 ...
- window,getComputedStyle,letter-spacing
js 拿到element的css样式 window.getComputedStyle(ele,[pseuso) 比如想拿到一个element的背景色 window.getComput ...
- Eolinker——前置用例的使用
如下补充均是Eolinker的文档中未说明的部分 1.在Eolinker的API自动化测试中,点击“前置用例”,“添加前置用例” 2.给添加的接口命名完之后,点击名称进入到编辑页面,代码输入框的内容为 ...
- [水煮 ASP.NET Web API2 方法论](12-2)管理 OData 路由
问题 如何控制 OData 路由 解决方案 为了注册路由,可以使用 HttpConfigurationExtension 类中 MapODataServiceRoute 的扩展方法.对于单一路由这样 ...
- vue模糊搜索&select取值
之前vue1.0的过滤器真的很好使,但是作者为了不让搬运工变得太菜.硬是砍去了过滤器,为此,我还哭了好一阵,终于,一点一点的弄明白了过滤器是怎么回事后,也学明白了vue里的属性监听器computed以 ...
- mysql中MAX()函数和count()函数的技巧使用
1.max()函数 在考虑提高数据库io的情况下,可以创建索引 ===>create index 索引名称 on 表名(列名); 2.count()函数 问题:count(*)与count(某列 ...