maven依赖循环引用 |
您所在的位置:网站首页 › maven循环引用 › maven依赖循环引用 |
我们知道现在使用json数据格式是前后端比较流行的交互手段。那么是不是所有的object对象都可以转换为json格式来传输呢? 显然不是的,这里给出一个反例。 我们新建一个SpringBoot项目(我这里的版本是2.2.2.RELEASE) 这里先贴出我们的pom.xml文件: 4.0.0 org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE undestiny demo 0.0.1-SNAPSHOT demo Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-web org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine org.springframework.boot spring-boot-maven-plugin创建一个实体Entity: import lombok.Data; @Data public class Entity { private Integer id; private Entity entity; }tips:@Data是lombok下注解,这里主要是用来提供getter/setter方法 然后写一个MyContoller,模拟一个循环引用(这里是自己引用自己): import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { @GetMapping("/demo") public Entity demo(){ Entity entity = new Entity(); entity.setEntity(entity); return entity; } }然后运行我们的项目。 在浏览器地址栏中输入:http://localhost:8080/demo 会发现我们的后台报了一个错误: 是jackson把entity转为json时出现了问题: Direct self-reference leading to cycle 直接自我引用导致循环 那么如果不是直接自我引用,而是间接的循环引用呢? 我们来修改一下MyController: import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { @GetMapping("/demo") public Entity demo(){ Entity entity1 = new Entity(); Entity entity2 = new Entity(); entity1.setEntity(entity2); entity2.setEntity(entity1); return entity1; } }之前是entity引用自己,现在是entity1引用entity2,entity2再引用entity1,形成间接循环。 然后运行我们的项目。 在浏览器地址栏中输入:http://localhost:8080/demo 会发现我们的后台报了一个StackOverflowError错误。 是我们的后台程序在尝试进行json处理时,发生了如下情况: 试图把entity1解析为JSON字符串发现entity1引用了entity2,就先把entity2解析为JSON字符串发现entity2引用了entity1,就先把entity1解析为JSON字符串发现entity1引用了entity2,就先把entity2解析为JSON字符串……无限循环下去,导致栈溢出,无法正确得到结果。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |