maven依赖循环引用

您所在的位置:网站首页 maven循环引用 maven依赖循环引用

maven依赖循环引用

2024-07-10 19:11| 来源: 网络整理| 查看: 265

我们知道现在使用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

会发现我们的后台报了一个错误:

c180e7fe0a46c34a9ee82b19d2c2a66f.png

是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