原文来自:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=3637281
fastjson网站
问题
在1.1.3版本之前,fastjson不支持循环引用。有些对象存在循环引用,例如:
public static class Department {
private int id;
private String name;
private Department parent;
private List<Department> children = new ArrayList<Department>();
public int getId() { return id; }
public void setId( int id) { this .id = id; }
public String getName() { return name; }
public void setName(String name) { this .name = name; }
public Department getParent() { return parent; }
public void setParent(Department parent) { this .parent = parent; }
public List<Department> getChildren() { return children; }
public void setChildren(List<Department> children) { this .children = children; }
}
|
这个代码中,parent和children之间存在循环应用了,执行JSON序列化时会报错:“com.alibaba.fastjson.JSONException:
maybe circular references”
解决办法一
在parent字段上添加修饰符transient
public static class Department {
private int id;
private String name;
private transient Department parent;
private List<Department> children = new ArrayList<Department>();
public int getId() { return id; }
public void setId( int id) { this .id = id; }
public String getName() { return name; }
public void setName(String name) { this .name = name; }
public Department getParent() { return parent; }
public void setParent(Department parent) { this .parent = parent; }
public List<Department> getChildren() { return children; }
public void setChildren(List<Department> children) { this .children = children; }
}
|
解决办法二
使用Annotation @JSONField标注不需要序列化getParent属性
public static class Department {
private int id;
private String name;
private Department parent;
private List<Department> children = new ArrayList<Department>();
public int getId() { return id; }
public void setId( int id) { this .id = id; }
public String getName() { return name; }
public void setName(String name) { this .name = name; }
@JSONField (serialize= false )
public Department getParent() { return parent; }
public void setParent(Department parent) { this .parent = parent; }
public List<Department> getChildren() { return children; }
public void setChildren(List<Department> children) { this .children = children; }
|
分享到:
相关推荐
FastJson是阿里巴巴开源的一款高性能的JSON处理工具,广泛应用于Java应用程序中,特别是...通过上述配置方法,开发者可以有效地解决在Spring MVC中使用FastJson时遇到的循环引用问题,确保应用的健壮性和数据的正确性。
文件内容还给出了解决重复引用和循环引用的几种方法: 1. 关闭FastJson的引用检测机制,使用SerializerFeature.DisableCircularReferenceDetect特性来进行序列化。这样做虽然可以解决引用问题,但不推荐使用,因为当...
在标题提到的“高版本的fastjson-1.2.71解决安全漏洞”中,我们主要关注的是Fastjson如何通过更新到1.2.71版本来修复这些已知的安全问题。 Fastjson的安全漏洞通常涉及其自动类型识别机制。这个机制允许JSON字符串...
这个漏洞主要源自Fastjson的`parseObject`和`parseArray`等方法,当解析包含特殊JSON格式的对象或数组时,Fastjson未能进行有效的安全校验,导致了反序列化过程中的代码执行。攻击者可以通过构造恶意的JSON字符串,...
《阿里巴巴Fastjson:高效便捷的JSON处理库》 ...通过引入"fastjson的jar包(alibaba.fastson引用所需jar包).rar",开发者可以直接使用Fastjson的功能,提高开发效率,减少因JSON处理带来的复杂性和错误可能性。
- `fastJSON-SL.sln` 和 `consoletest.sln` 是Visual Studio 解决方案文件,它们包含了项目的源代码和测试用例,方便开发者进行代码审查和扩展。 7. **历史记录**: - `history.txt` 文件可能记录了 FastJSON 自...
Fastjson 1.2.80 及之前版本使用黑白名单用于防御反序列化漏洞,经研究该防御策略在特定条件下可绕过默认 autoType 关闭限制,攻击远程服务器,风险影响较大。建议 Fastjson 用户尽快采取安全措施保障系统安全
此外,避免在不安全的环境中使用`parseObject()`方法,防止恶意输入导致代码执行。 总之,Fastjson作为一款强大的JSON解析库,提供了丰富的功能和优秀的性能。在理解和掌握其基本用法的基础上,深入学习其高级特性...
fastJSON 使用介绍 fastJSON 是一个快速的 JSON 组件,可以用于 C# 中对 JSON 数据的序列化和反序列化。下面是关于 fastJSON 的知识点: fastJSON 简介 fastJSON 是一个开源的 JSON 序列化组件,可以用于 C# 中对...
FastJson工具,附带有使用方法 他的优点是: ·高性能· fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库... 支持循环引用 ·无依赖· 不需要例外额外的jar,能够直接跑在JDK上。
总的来说,了解并解决Fastjson的安全隐患对于任何使用该库的应用都是至关重要的。保持库的及时更新,结合合理的安全配置和输入验证,可以有效地保护系统免受恶意攻击。对于无法立即升级的场景,应当采取额外的安全...
在这个小例子中,我们将深入探讨FastJson的使用方法,以及它如何帮助开发者在Android开发中快速处理JSON数据。 在Android应用开发中,JSON是一种常见的数据交换格式,用于在服务器和客户端之间传递数据。FastJson以...
本文将围绕Fastjson的核心特性、使用方法以及优化策略展开详细讲解。 一、Fastjson概述 Fastjson是阿里巴巴开源项目中的明星产品,它的主要功能是将Java对象转换为JSON字符串,反之也能将JSON字符串解析为Java对象...
总的来说,阿里Fastjson是一个强大且高效的JSON工具,广泛应用于各种Java项目,提供便捷的数据交换和序列化解决方案。无论是小型应用还是大型系统,它都能有效地提升开发效率和应用性能。通过深入理解其源码,开发者...
### fastjson常用方法 在Java开发中,JSON作为一种轻量级的数据交换格式,被广泛应用于前后端数据交互、配置文件存储等场景。阿里集团推出的fastjson是目前最流行的Java JSON库之一,它不仅性能优越,而且使用起来...
例如,通过简单的`parse()`和`toJSONString()`方法,即可完成JSON与Java对象之间的转换。同时,它支持多种类型的Java对象,包括基本类型、自定义类、集合、Map等,满足了各种复杂的业务需求。 在处理复杂JSON结构时...
博主通常会在这样的文章中分享关于如何使用fastJSON进行数据转换、优化性能以及解决常见问题的经验。由于没有实际内容可以引用,我们将基于fastJSON的一般知识来展开讨论。 1. **JSON简介**: JSON(JavaScript ...
在Android开发中,数据交换和序列化是常见的需求,FastJSON是阿里巴巴提供的一款高效、功能丰富的JSON库,它被广泛应用于Android Studio项目中。本文将详细介绍如何在Android Studio中使用FastJSON进行JSON解析和...
在给定的资源“fastjson-1.2.58.rar”中,包含了Fastjson的特定版本1.2.58的jar包,解压后可以直接在项目中引用,进行JSON和XML之间的转换操作。 一、Fastjson核心功能 1. JSON解析与生成:Fastjson可以将JSON字符...
这个"fastJson依赖jar包"正是包含了Fastjson库的Java类库文件,供开发者在项目中引用使用。 Fastjson的核心功能包括以下几点: 1. **JSON解析与生成**:Fastjson提供了便捷的API,可以将JSON字符串解析成Java对象...