使用knife4j-openapi3-spring-boot-starter,打开doc.html页面报stackoverflow异常
使用knife4j-openapi3-spring-boot-starter,打开doc.html页面报stackoverflow异常
knife4j是一款不错集swagger2以及openapi3的增强方案,具体可以查看官网:
本文提及的这个问题在swagger2正常,但是迁移到openapi3上时却出现了stackoverflow异常,部分异常信息如下所示:
Caused by: java.lang.StackOverflowError: null
at org.springframework.util.ObjectUtils.nullSafeHashCode(ObjectUtils.java:423) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.core.ResolvableType.calculateHashCode(ResolvableType.java:938) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.core.ResolvableType.(ResolvableType.java:148) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.core.ResolvableType.forType(ResolvableType.java:1436) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.core.ResolvableType.forType(ResolvableType.java:1405) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.core.ResolvableType.getGenerics(ResolvableType.java:720) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.core.ResolvableType.getGenerics(ResolvableType.java:724) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.core.ResolvableType.hasUnresolvableGenerics(ResolvableType.java:548) ~[spring-core-5.3.23.jar:5.3.23]
at org.springdoc.core.ReturnTypeParser.resolveType(ReturnTypeParser.java:87) ~[springdoc-openapi-common-1.6.15.jar:1.6.15]
at org.springdoc.core.ReturnTypeParser.resolveType(ReturnTypeParser.java:93) ~[springdoc-openapi-common-1.6.15.jar:1.6.15]
at org.springdoc.core.ReturnTypeParser.resolveType(ReturnTypeParser.java:93) ~[springdoc-openapi-common-1.6.15.jar:1.6.1
从上面标红部分可以断定是泛型类的类型确定不了,场景如下所示:
// 出问题的类
public class SysOrgs<T extends SysOrgs<T>> {
private String name;
private List<T> children;
}
// controller某接口
@GetMapping
public List<SysOrgs> getOrgs(....){
}
问题就出在上面的controller使用了一个没指定泛型类型的SysOrgs基础类,导致openapi3在生成对应接口文档时无法解析的情况而导致了死循环,最终报了stackoverflow异常

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)