如何在Springfox Api-docs中隐藏自动生成的XML注解(Gradle+Springfox-swagger-ui 3.0.0场景)
解决Springfox 3.0.0移除自动生成POJO的XML注解问题
没问题,既然你没法修改XJC生成的POJO类,我们可以通过自定义Springfox插件来拦截并移除模型属性中的XML注解元数据,完全不需要改动生成的代码。
核心思路
Springfox的文档生成依赖一系列可扩展的插件,我们可以自定义一个ModelBuilderPlugin,在模型属性构建的过程中清除掉XML相关的配置,这样生成的Api-docs和Swagger UI就不会再显示XML注解的内容了。
具体实现步骤
- 创建一个Swagger配置类,注册自定义插件:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ModelBuilderPlugin; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.schema.contexts.ModelPropertyContext; @Configuration public class SwaggerXmlCleanupConfig { @Bean public ModelBuilderPlugin xmlAnnotationRemoverPlugin() { return new ModelBuilderPlugin() { @Override public void apply(ModelPropertyContext context) { // 清除当前属性的XML元数据配置 context.getBuilder().xml(null); } @Override public boolean supports(DocumentationType documentationType) { // 对所有Swagger文档类型生效(包括Swagger2和OpenAPI3) return true; } }; } }
- 确保这个配置类被Spring容器扫描到(比如放在你的配置包下,或者通过
@ComponentScan指定扫描路径)。
效果验证
启动项目后,重新查看Api-docs,你会发现machineSerialNumber属性下的xml节点已经被移除,Swagger UI的模型展示里也不会再显示任何XML相关的注解信息,完全符合你期望的输出格式。
补充说明
- 如果你只需要针对特定包下的XJC生成类生效,可以在
apply方法里添加包路径判断:Class<?> propertyClass = context.getBeanPropertyDefinition().getRawType(); if (propertyClass.getPackageName().startsWith("你的XJC生成类的包路径")) { context.getBuilder().xml(null); } - 因为你用的是
compileOnly依赖springfox-swagger-ui,要确保项目中已正确引入Springfox核心依赖(比如springfox-boot-starter),否则自定义插件可能无法被加载。
内容的提问来源于stack exchange,提问作者Maciej Piorun
相关产品推荐
相关产品推荐

