Ajax获取数据遇net::ERR_INCOMPLETE_CHUNKED_ENCODING及StackOverflowError求助
解决GET请求出现net::ERR_INCOMPLETE_CHUNKED_ENCODING与StackOverflowError的问题
兄弟,你这问题我熟!前端请求GET http://localhost:8080/loggedUsers时出现net::ERR_INCOMPLETE_CHUNKED_ENCODING,同时后端抛出java.lang.StackOverflowError,结合栈信息里的Jackson相关异常,核心原因基本是对象循环引用导致JSON序列化递归溢出——服务器还没完成响应就崩了,前端自然收不到完整的分块编码数据。
下面给你一步步排查和解决的思路:
一、先定位循环引用的对象
先检查你要返回的loggedUsers相关实体类,有没有双向/循环引用的情况:
- 比如
User类里有Group类型的属性,而Group类里又有List<User>类型的属性 - 或者实体类自己引用自己(比如菜单类里同时有父菜单和子菜单属性)
这种引用关系会让Jackson在序列化时无限递归遍历,直接撑爆JVM栈空间,抛出StackOverflowError。
二、用Jackson注解快速解决循环引用
针对循环引用,最常用的两种解决方案:
方案1:用
@JsonIgnore忽略引用字段
在循环引用的其中一方字段上添加@JsonIgnore注解,简单直接切断递归链:public class Group { private String name; @JsonIgnore // 忽略该字段,避免递归序列化 private List<User> users; // getter/setter }优点是操作简单,缺点是会丢失该字段的序列化数据。
方案2:用
@JsonManagedReference和@JsonBackReference配合
这种方式能保留数据,同时避免递归:public class User { private String username; @JsonManagedReference // 标记主动引用的一方 private Group group; // getter/setter } public class Group { private String name; @JsonBackReference // 标记反向引用的一方,Jackson会自动跳过递归 private List<User> users; // getter/setter }
三、验证序列化是否正常
可以在后端写个简单的测试代码,手动触发Jackson序列化,快速验证问题是否解决:
@Autowired private ObjectMapper objectMapper; @Test public void testSerialization() throws JsonProcessingException { List<User> loggedUsers = // 模拟获取你的用户列表 String json = objectMapper.writeValueAsString(loggedUsers); System.out.println(json); // 如果能正常输出,说明循环引用问题已解决 }
四、其他可能的排查方向
如果确认没有循环引用,那就要检查是否有其他递归逻辑导致栈溢出:
- 比如某个业务方法自己调用自己,没有终止条件
- 或者深层嵌套的方法调用(比如多层递归生成权限树、菜单树等)
不过结合你给出的Jackson栈信息,循环引用还是最可能的原因。
最后要说明:前端的net::ERR_INCOMPLETE_CHUNKED_ENCODING是后端异常的连锁反应,只要解决了后端的StackOverflowError,前端的请求就能正常收到完整响应了。
内容的提问来源于stack exchange,提问作者user9658240
相关产品推荐
相关产品推荐

