【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:定义实体类 //用户类 ...
随机推荐
- STL不同容器的使用方法
以下内容摘自:http://blog.csdn.net/u014465639/article/details/70241850 1.vector(需要导入头文件#include <vector& ...
- java 内部类和静态内部类的区别
private class InnerClass { // 只有在静态内部类中才能够声明或定义静态成员 // private static String tt = &quo ...
- LeetCode解题报告—— Interleaving String
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. Example 1: Input: s1 = ...
- LeetCode解题报告—— Search in Rotated Sorted Array & Search for a Range & Valid Sudoku
1. Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated(轮流,循环) at so ...
- SQl server 2008 附加数据库失败,错误:5120
通过附加功能添加现成的数据库是非常方便的,然而有时会出现附加数据库失败.那么,我们该如何解决此问题? 有两种解决方法 [第一种方法] 第一步:找到要添加数据库的.mdf文件,点击右键,选择属性. 第二 ...
- 玩转树莓派 - 修改Raspbian软件源加快软件下载速度
这是 meelo 原创的 玩转树莓派 系列文章 步骤1:登录到Raspbian的命令行界面 步骤2:修改Raspbian的软件源 软件源是Linux系统免费的应用程序安装仓库,很多的应用软件都会这收录 ...
- BZOJ 1901: Zju2112 Dynamic Rankings 区间k大 带修改 在线 线段树套平衡树
之前写线段树套splay数组版..写了6.2k..然后弃疗了.现在发现还是很水的..嘎嘎.. zju过不了,超时. upd:才发现zju是多组数据..TLE一版才发现.然后改了,MLE...手写内存池 ...
- JS中的对象和方法简单剖析
众所周知,在js中对象就是精髓,不理解对象就是不理解js. 那么什么事js中的对象呢? 在js中,几乎一切皆对象: Boolean ,String,Number可以是对象(或者说原生数据被认作对象): ...
- cmd命令和加密文件玩法
文本里写入: .LOGsysteminfo //电脑信息ipconfig //ip获取ping baidu.com//测试网络,查看网站服务器地址 9:03 2017/11/10 netplwiz / ...
- .net mvc禁用浏览器缓存
我正在寻找方法来禁用 整个 ASP.Net MVC 网站 的浏览器缓存 我发现以下方法, Response.Cache.SetCacheability(System.Web.HttpCacheabil ...