当前位置:网站首页>@JsonBackReference和@JsonManagedReference(解决对象中存在双向引用导致的无限递归)
@JsonBackReference和@JsonManagedReference(解决对象中存在双向引用导致的无限递归)
2022-07-06 08:30:00 【XYLANCC】
jackson中的@JsonBackReference和@JsonManagedReference,以及@JsonIgnore均是为了解决对象中存在双向引用导致的无限递归(infinite recursion)问题。这些标注均可用在属性或对应的get、set方法中。
@JsonBackReference和@JsonManagedReference:这两个标注通常配对使用,通常用在父子关系中。@JsonBackReference标注的属性在序列化(serialization,即将对象转换为json数据)时,会被忽略(即结果中的json数据不包含该属性的内容)。@JsonManagedReference标注的属性则会被序列化。在序列化时,@JsonBackReference的作用相当于@JsonIgnore,此时可以没有@JsonManagedReference。但在反序列化(deserialization,即json数据转换为对象)时,如果没有@JsonManagedReference,则不会自动注入@JsonBackReference标注的属性(被忽略的父或子);如果有@JsonManagedReference,则会自动注入自动注入@JsonBackReference标注的属性。
@JsonIgnore:直接忽略某个属性,以断开无限递归,序列化或反序列化均忽略。当然如果标注在get、set方法中,则可以分开控制,序列化对应的是get方法,反序列化对应的是set方法。在父子关系中,当反序列化时,@JsonIgnore不会自动注入被忽略的属性值(父或子),这是它跟@JsonBackReference和@JsonManagedReference最大的区别。
示例测试代码(注意反序列化后的TreeNode[readValue]的children里的parent):
TreeNode.java
import java.util.ArrayList;
import java.util.List;
import org.codehaus.jackson.annotate.JsonBackReference;
import org.codehaus.jackson.annotate.JsonManagedReference;
public class TreeNode {
String name;
@JsonBackReference
// @JsonIgnore
TreeNode parent;
@JsonManagedReference
List<TreeNode> children;
public TreeNode() {
}
public TreeNode(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public TreeNode getParent() {
return parent;
}
public void setParent(TreeNode parent) {
this.parent = parent;
}
public List<TreeNode> getChildren() {
return children;
}
public void setChildren(List<TreeNode> children) {
this.children = children;
}
public void addChild(TreeNode child) {
if (children == null)
children = new ArrayList<TreeNode>();
children.add(child);
}
}
JsonTest.java
Java代码 收藏代码
import java.io.IOException;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
public class JsonTest {
static TreeNode node;
@BeforeClass
public static void setUp() {
TreeNode node1 = new TreeNode("node1");
TreeNode node2 = new TreeNode("node2");
TreeNode node3 = new TreeNode("node3");
TreeNode node4 = new TreeNode("node4");
TreeNode node5 = new TreeNode("node5");
TreeNode node6 = new TreeNode("node6");
node1.addChild(node2);
node2.setParent(node1);
node2.addChild(node3);
node3.setParent(node2);
node2.addChild(node4);
node4.setParent(node2);
node3.addChild(node5);
node5.setParent(node3);
node5.addChild(node6);
node6.setParent(node5);
node = node3;
}
@Test
public void test() throws JsonGenerationException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(node);
System.out.println(json);
TreeNode readValue = mapper.readValue(json, TreeNode.class);
System.out.println(readValue.getName());
}
@AfterClass
public static void tearDown() {
node = null;
}
} 边栏推荐
- MySQL learning record 10getting started with JDBC
- Circular reference of ES6 module
- 深度剖析C语言指针
- Image,cv2读取图片的numpy数组的转换和尺寸resize变化
- The resources of underground pipe holes are tight, and the air blowing micro cable is not fragrant?
- Remote storage access authorization
- logback1.3. X configuration details and Practice
- 深度剖析C语言数据在内存中的存储
- Image fusion -- challenges, opportunities and Countermeasures
- Unified ordering background interface product description Chinese garbled
猜你喜欢

2022 Inner Mongolia latest water conservancy and hydropower construction safety officer simulation examination questions and answers

Roguelike游戏成破解重灾区,如何破局?

2022 Inner Mongolia latest construction tower crane (construction special operation) simulation examination question bank and answers

C language double pointer -- classic question type

优秀的软件测试人员,都具备这些能力

Zhong Xuegao, who cannot be melted, cannot escape the life cycle of online celebrity products

【MySQL】数据库的存储过程与存储函数通关教程(完整版)

704 二分查找

2022.02.13 - NC003. Design LRU cache structure

Beijing invitation media
随机推荐
[MySQL] log
LDAP application (4) Jenkins access
sys. argv
synchronized 解决共享带来的问题
[MySQL] lock
China high purity silver nitrate Market Research and investment strategy report (2022 Edition)
Migrate data from SQL files to tidb
【ROS】usb_cam相机标定
sublime text的编写程序时的Tab和空格缩进问题
Summary of phased use of sonic one-stop open source distributed cluster cloud real machine test platform
【MySQL】鎖
Circular reference of ES6 module
2022.02.13 - NC002. sort
Double pointeur en langage C - - modèle classique
logback1.3. X configuration details and Practice
Leetcode question brushing (5.28) hash table
生成器参数传入参数
Deep learning: derivation of shallow neural networks and deep neural networks
On the inverse order problem of 01 knapsack problem in one-dimensional state
【Nvidia开发板】常见问题集 (不定时更新)