You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2集成Springfox Swagger2 2.8.0启动StackOverflowError问题排查

Spring Boot 2 + Springfox Swagger2 2.8.0 启动StackOverflowError问题解析

问题原因

从你贴出的报错堆栈能明显看到,ModelAttributeParameterExpander.expand()方法一直在递归调用,最终触发了StackOverflowError。这通常有两个核心诱因:

  1. 实体类/DTO存在循环引用:比如你的User对象里包含Order列表,而Order对象又反向引用了User,Springfox 2.8.0在解析这类双向依赖的模型时,无法自动终止递归,导致栈空间被耗尽。
  2. 版本兼容性问题:Springfox 2.8.0发布时,Spring Boot 2还处于早期预览版,两者的适配存在一些细节缺陷,会放大循环引用引发的递归问题。

解决办法

我整理了几个实用的解决方案,你可以根据自己的项目情况选择:

  • 排除循环引用字段:在引发循环依赖的字段上添加Swagger的隐藏注解,让解析器跳过该字段。如果同时用Jackson做序列化,也可以搭配@JsonIgnore:

    public class Order {
        // 隐藏这个会触发递归的User引用
        @ApiModelProperty(hidden = true)
        private User user;
        // 其他业务字段...
    }
    
  • 升级Springfox到兼容版本:Springfox 2.9.2是对Spring Boot 2.x兼容性较好的版本,升级后能自动处理大部分循环引用的递归问题。修改你的依赖配置:
    Maven示例:

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
    
  • 自定义Swagger递归深度限制:如果不想修改实体或升级版本,可以通过配置强制限制模型解析的递归深度,避免无限递归:

    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
        @Bean
        public Docket api() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.decisionwanted.api"))
                    .paths(PathSelectors.any())
                    .build()
                    .models(new DefaultModelProvider(
                            new DefaultModelSpecificationBuilders(),
                            new ModelResolver(
                                    new TypeNameProvider(),
                                    new JacksonModuleRegistrar(),
                                    new DefaultModelConverter(),
                                    2 // 设置递归深度为2,根据你的实体结构调整
                            )
                    ));
        }
    }
    

内容的提问来源于stack exchange,提问作者alexanoid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:38:26