Spring Boot集成Swagger 2.9.2:如何隐藏Swagger UI模型名称仅展示属性
Spring Boot Swagger 2.9.2 隐藏模型名称仅展示属性的实现方案
方法一:后端自定义ModelConverter处理(最实用)
Swagger 2.9.2支持通过自定义ModelConverter干预模型解析逻辑,我们可以在DTO类被解析成Swagger模型时,把模型名称设为空字符串,这样UI里就不会显示模型名,只留属性:
- 编写自定义ModelConverter类
import io.swagger.converter.ModelConverter; import io.swagger.converter.ModelConverterContext; import io.swagger.models.Model; import io.swagger.models.ModelImpl; import java.lang.reflect.Type; import java.util.Iterator; public class HideModelNameConverter implements ModelConverter { @Override public Model resolve(Type type, ModelConverterContext context, Iterator<ModelConverter> chain) { Model model = chain.next().resolve(type, context, chain); if (model instanceof ModelImpl) { // 把模型名称置空,Swagger UI就不会渲染模型标题 ((ModelImpl) model).setName(""); } return model; } }
- 在Swagger配置类中注册转换器
在你的SwaggerConfig类里,添加初始化方法完成转换器注册:
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; import javax.annotation.PostConstruct; @Configuration @EnableSwagger2 public class SwaggerConfig { @PostConstruct public void registerModelConverter() { // 将自定义转换器加入Swagger模型转换器列表 io.swagger.converter.ModelConverters.getInstance().addConverter(new HideModelNameConverter()); } @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.your.project.api")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("项目API文档") .version("1.0") .build(); } }
方法二:修改Swagger UI前端资源(不推荐)
如果后端方法无法满足需求,也可以直接修改前端UI样式隐藏模型名称:
- 把
springfox-swagger-uijar包中的swagger-ui.html及对应CSS文件,复制到项目的resources/META-INF/resources/webjars/springfox-swagger-ui/目录下 - 在CSS文件中添加样式:
.model-title { display: none; } - 重启项目后,UI中的模型名称会被隐藏
这种方法的弊端是Swagger版本更新后,自定义静态资源可能失效,维护成本较高,优先推荐方法一。
内容的提问来源于stack exchange,提问作者Prashant
相关产品推荐
相关产品推荐

