当前位置:网站首页>@Jsonbackreference and @jsonmanagedreference (solve infinite recursion caused by bidirectional references in objects)
@Jsonbackreference and @jsonmanagedreference (solve infinite recursion caused by bidirectional references in objects)
2022-07-06 08:38:00 【XYLANCC】
jackson Medium @JsonBackReference and @JsonManagedReference, as well as @JsonIgnore It is to solve the infinite recursion caused by the existence of two-way references in the object (infinite recursion) problem . These dimensions can be used in attributes or corresponding get、set In the method .
@JsonBackReference and @JsonManagedReference: These two labels are usually used in pairs , Usually used in parent-child relationships [email protected] The attributes of the annotation are serialized (serialization, Convert the object to json data ) when , Will be ignored ( That is... In the result json The data does not contain the content of this attribute )[email protected] The attributes of the annotation are serialized . At serialization ,@JsonBackReference Is equivalent to @JsonIgnore, There can be no @JsonManagedReference. But in deserialization (deserialization, namely json Data to object ) when , without @JsonManagedReference, Will not automatically inject @JsonBackReference The properties of the annotation ( Neglected parent or child ); If there is @JsonManagedReference, Will be automatically injected @JsonBackReference The properties of the annotation .
@JsonIgnore: Ignore an attribute directly , To break infinite recursion , Serialization or deserialization are ignored . Of course, if marked in get、set In the method , Can be controlled separately , Serialization corresponds to get Method , Deserialization corresponds to set Method . In a father son relationship , When deserializing ,@JsonIgnore Ignored attribute values are not automatically injected ( Parent or child ), This is it with @JsonBackReference and @JsonManagedReference The biggest difference .
Sample test code ( Pay attention to the deserialized TreeNode[readValue] Of children Inside 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 Code Collection code
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;
}
}
边栏推荐
- 电脑清理,删除的系统文件
- Bitwise logical operator
- Cisp-pte practice explanation
- Leetcode question brushing (5.28) hash table
- Precise query of tree tree
- [MySQL] database stored procedure and storage function clearance tutorial (full version)
- Bottom up - physical layer
- Online yaml to CSV tool
- leetcode刷题 (5.31) 字符串
- The harm of game unpacking and the importance of resource encryption
猜你喜欢
After PCD is converted to ply, it cannot be opened in meshlab, prompting error details: ignored EOF
leetcode刷题 (5.28) 哈希表
C语言双指针——经典题型
C语言深度解剖——C语言关键字
MySQL learning records 12jdbc operation transactions
深度剖析C语言数据在内存中的存储
深度剖析C语言指针
Analysis of the source code of cocos2d-x for mobile game security (mobile game reverse and protection)
优秀的软件测试人员,都具备这些能力
Cisp-pte practice explanation
随机推荐
JVM quick start
Hungry for 4 years + Ali for 2 years: some conclusions and Thoughts on the road of research and development
China dihydrolaurenol market forecast and investment strategy report (2022 Edition)
Computer cleaning, deleted system files
MySQL learning record 07 index (simple understanding)
LDAP application (4) Jenkins access
按位逻辑运算符
Roguelike游戏成破解重灾区,如何破局?
C語言雙指針——經典題型
Leetcode question brushing (5.28) hash table
[secretly kill little partner pytorch20 days -day01- example of structured data modeling process]
Sublime text in CONDA environment plt Show cannot pop up the problem of displaying pictures
China polyether amine Market Forecast and investment strategy report (2022 Edition)
【MySQL】日志
2022.02.13 - NC004. Print number of loops
Is it safe to open an account in Zheshang futures?
VMware virtualization cluster
Colorlog combined with logging to print colored logs
VMware 虚拟化集群
Research Report on supply and demand and development prospects of China's high purity aluminum market (2022 Edition)