Springfox 2.8.0:如何在Swagger-UI中隐藏@ApiModelProperty的allowEmptyValue描述
嘿,我刚好碰到过类似的需求,在Springfox 2.8.0版本里要隐藏swagger-ui页面中响应字段里@ApiModelProperty的allowEmptyValue描述,其实通过自定义Springfox的插件就能轻松搞定,不用折腾前端代码,步骤很清晰:
方法:自定义ModelProperty构建插件
Springfox自带了插件扩展机制,我们可以通过实现ModelPropertyBuilderPlugin来拦截模型属性的构建过程,清除掉allowEmptyValue的设置,这样生成的Swagger文档里就不会包含这个属性,UI自然就不会显示对应的描述了。
1. 创建自定义插件类
写一个类实现ModelPropertyBuilderPlugin,并注册为Spring组件:
import org.springframework.stereotype.Component; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.schema.ModelPropertyBuilderPlugin; import springfox.documentation.spi.schema.contexts.ModelPropertyContext; @Component public class HideAllowEmptyValuePlugin implements ModelPropertyBuilderPlugin { @Override public void apply(ModelPropertyContext context) { // 将allowEmptyValue设置为null,让Swagger文档不生成这个属性 context.getBuilder().allowEmptyValue(null); } @Override public boolean supports(DocumentationType documentationType) { // 支持所有Swagger文档类型(这里主要针对Swagger 2) return true; } }
2. 确保插件被Spring扫描到
把这个类放在你的Spring Boot项目中被@ComponentScan覆盖的包路径下,要是你是手动配置Bean的话,也可以用@Bean注解把它注册到Spring容器里。
原理说明
这个插件会在Springfox构建每个模型属性的时候触发,我们通过context.getBuilder().allowEmptyValue(null)清除了allowEmptyValue的配置,这样最终生成的swagger.json文件里就不会包含allowEmptyValue字段,Swagger-UI页面也就不会显示对应的描述了。
要是你只想针对个别字段处理,其实可以试试在@ApiModelProperty里显式设置allowEmptyValue = false?不过实测下来,即使设为false,UI还是会显示这个描述,所以全局插件的方式更彻底。
内容的提问来源于stack exchange,提问作者user5427036

