You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SpringFox中如何注解Number类型参数?解决Swagger UI不显示问题

解决SpringFox Swagger中Number类型参数不显示的问题

我来帮你搞定这个困扰!其实Swagger并非只支持基本数据类型,问题出在SpringFox对Java抽象类Number的自动映射上,下面是具体的原因和解决方案:

为什么Number类型参数不显示?

Java的Number是一个抽象类,SpringFox默认无法确定它对应的具体Swagger数值类型(比如integer、float、double等),所以在解析的时候就忽略了这个参数。你之前尝试的type = "number", format = "float"没生效,是因为对于@RequestParam这类请求参数,SpringFox的自动类型解析优先级高于@ApiParam里的手动指定,尤其是面对抽象类的时候。

解决方案

1. 替换为具体的数值类型(推荐)

这是最简单直接的办法,把Number换成具体的子类(比如IntegerLongDouble),SpringFox对这些基本包装类型有完善的支持,替换后Swagger UI就能正常显示参数了:

@ApiParam(value = "Unique, system generated identifier of student.", required = true) 
@RequestParam("serialNo") Integer serialNo

2. 自定义类型映射(必须用Number时)

如果业务上必须使用Number类型,可以通过SpringFox的配置手动指定Number对应的Swagger类型。在你的Swagger配置类里,给Docket添加directModelSubstitute映射:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("你的接口所在包路径"))
                .paths(PathSelectors.any())
                .build()
                // 把Number类型映射为Double,也可以换成Integer/Long等你需要的类型
                .directModelSubstitute(Number.class, Double.class);
    }
}

这样SpringFox就会把所有Number类型的参数当成你指定的具体数值类型处理,Swagger UI就能正常展示了。

3. 升级SpringFox版本

如果你使用的是较老的SpringFox版本(比如2.x早期版本),可能存在对抽象数值类型的支持缺陷,升级到最新的稳定版本(比如2.9.2,或者3.x系列对应OpenAPI 3.0)可能会自动解决这个问题。

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

火山引擎 最新活动