当前位置:网站首页>@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;
}
}
边栏推荐
- China Light conveyor belt in-depth research and investment strategy report (2022 Edition)
- Unified ordering background interface product description Chinese garbled
- What is CSRF (Cross Site Request Forgery)?
- logback1.3. X configuration details and Practice
- sublime text的编写程序时的Tab和空格缩进问题
- 2022.02.13 - NC002. sort
- Configuring OSPF load sharing for Huawei devices
- Trying to use is on a network resource that is unavailable
- Mobile phones and computers on the same LAN access each other, IIS settings
- Let the bullets fly for a while
猜你喜欢
个人电脑好用必备软件(使用过)
ROS编译 调用第三方动态库(xxx.so)
【ROS】usb_cam相机标定
Generator parameters incoming parameters
egg. JS getting started navigation: installation, use and learning
Verrouillage [MySQL]
延迟初始化和密封类
Roguelike game into crack the hardest hit areas, how to break the bureau?
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
[cloud native topic -45]:kubesphere cloud Governance - Introduction and overall architecture of enterprise container platform based on kubernetes
随机推荐
egg. JS project deployment online server
【刷题】牛客网面试必刷TOP101
【MySQL】鎖
sublime text的编写程序时的Tab和空格缩进问题
Research and investment forecast report of citronellol industry in China (2022 Edition)
TCP/IP协议
marathon-envs项目环境配置(强化学习模仿参考动作)
LDAP應用篇(4)Jenkins接入
China vanadium battery Market Research and future prospects report (2022 Edition)
Mobile phones and computers on the same LAN access each other, IIS settings
目标检测——Pytorch 利用mobilenet系列(v1,v2,v3)搭建yolov4目标检测平台
JVM performance tuning and practical basic theory - Part 1
生成器参数传入参数
gcc动态库fPIC和fpic编译选项差异介绍
win10系统中的截图,win+prtSc保存位置
egg. JS directory structure
Browser thread
PC easy to use essential software (used)
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
Problems in loading and saving pytorch trained models