前情提要,最近的一个springboot3.0以上的项目想集成knife4j接口文档,但是出现致命错误
栈内存错误,这让我十分难受,并没有给我指向一个排查的范围,在查阅大量相关资料以及到他们各自官方提issue无果(因为这通常需要时间),而这个项目时间,又比较紧急,只好自己去排查
2024-03-14 10:43:28.038 [http-nio-8899-exec-10] ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/](DirectJDKLog.java:175)(DirectJDKLog.java:175- Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed: java.lang.StackOverflowError] with root cause
java.lang.StackOverflowError: null
at com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap.tryToDrainBuffers(PrivateMaxEntriesMap.java:378)
at com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap.drainOnReadIfNeeded(PrivateMaxEntriesMap.java:358)
at com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap.afterRead(PrivateMaxEntriesMap.java:315)
at com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap.get(PrivateMaxEntriesMap.java:622)
at com.fasterxml.jackson.databind.util.LRUMap.get(LRUMap.java:63)
at com.fasterxml.jackson.databind.type.TypeFactory._fromClass(TypeFactory.java:1468)
at com.fasterxml.jackson.databind.type.TypeFactory._fromAny(TypeFactory.java:1401)
at com.fasterxml.jackson.databind.type.TypeFactory.constructType(TypeFactory.java:752)
好在这个项目代码量并不算太大,经过我长达两天的排查,排查方式就是控制变量法,一个个测,不管是依赖还是注解还是配置类,漫长的排查过程就不再赘述了,这里直接给到结果,也是非常让我意想不到原因,排查到最后我不敢相信是他,但是到最后即使是认为最不可能的原因他也是真相
/**
* (Page)表实体类
*
* @author tangrufei
* @since 2023-03-27 15:30:54
*/
@SuppressWarnings("serial")
public class Page extends Model<Page> { //问题处在这儿,平平无奇实体类,怎么也不会想到他,恰恰就是他,这里去掉继承就可以了
@TableId(type = IdType.AUTO)
private Integer id;
private String content;
private String projectPath;
private Integer fileType;
}