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换成具体的子类(比如Integer、Long、Double),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




