当前位置:网站首页>@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;
}
}
边栏推荐
- 堆排序详解
- Research Report on supply and demand and development prospects of China's high purity aluminum market (2022 Edition)
- MySQL learning record 07 index (simple understanding)
- Screenshot in win10 system, win+prtsc save location
- C語言雙指針——經典題型
- logback1.3. X configuration details and Practice
- Unified ordering background interface product description Chinese garbled
- Colorlog combined with logging to print colored logs
- swagger设置字段required必填
- Browser thread
猜你喜欢
PLT in Matplotlib tight_ layout()
Cisp-pte practice explanation
Computer cleaning, deleted system files
CISP-PTE实操练习讲解
Process of obtaining the electronic version of academic qualifications of xuexin.com
2022.02.13 - NC001. Reverse linked list
What is CSRF (Cross Site Request Forgery)?
Online yaml to CSV tool
3. File operation 3-with
JS inheritance method
随机推荐
The problem and possible causes of the robot's instantaneous return to the origin of the world coordinate during rviz simulation
How to conduct interface test? What are the precautions? Nanny level interpretation
Chrome浏览器的crash问题
Shift Operators
The harm of game unpacking and the importance of resource encryption
MySQL learning record 10getting started with JDBC
Report on Market Research and investment prospects of China's silver powder industry (2022 Edition)
sublime text中conda环境中plt.show无法弹出显示图片的问题
Mobile Test Engineer occupation yyds dry goods inventory
sys.argv
Introduction to the differences between compiler options of GCC dynamic library FPIC and FPIC
LDAP應用篇(4)Jenkins接入
Visual implementation and inspection of visdom
China vanadium battery Market Research and future prospects report (2022 Edition)
Generator parameters incoming parameters
tree树的精准查询
Ruffian Heng embedded bimonthly, issue 49
MySQL learning record 11jdbcstatement object, SQL injection problem and Preparedstatement object
egg. JS project deployment online server
Process of obtaining the electronic version of academic qualifications of xuexin.com