当前位置:网站首页>@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;
}
}
边栏推荐
- Summary of MySQL index failure scenarios
- swagger设置字段required必填
- FairGuard游戏加固:游戏出海热潮下,游戏安全面临新挑战
- [MySQL] database stored procedure and storage function clearance tutorial (full version)
- MySQL learning record 07 index (simple understanding)
- Visual implementation and inspection of visdom
- 被破解毁掉的国产游戏之光
- JS pure function
- 根据csv文件某一列字符串中某个数字排序
- 从表中名称映射关系修改视频名称
猜你喜欢
随机推荐
Mobile Test Engineer occupation yyds dry goods inventory
2022.02.13 - 238. Maximum number of "balloons"
Restful API design specification
Introduction to the differences between compiler options of GCC dynamic library FPIC and FPIC
Mobile phones and computers on the same LAN access each other, IIS settings
CISP-PTE实操练习讲解
On the day of resignation, jd.com deleted the database and ran away, and the programmer was sentenced
Purpose of computer F1-F12
根据csv文件某一列字符串中某个数字排序
The mysqlbinlog command uses
Colorlog combined with logging to print colored logs
win10系统中的截图,win+prtSc保存位置
logback1.3. X configuration details and Practice
Process of obtaining the electronic version of academic qualifications of xuexin.com
sys.argv
电脑F1-F12用途
leetcode刷题 (5.28) 哈希表
Is it safe to open an account in Zheshang futures?
Fibonacci sequence
[2022 Guangdong saim] Lagrange interpolation (multivariate function extreme value divide and conquer NTT)