You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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注解的内容了。

具体实现步骤

  1. 创建一个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;
            }
        };
    }
}
  1. 确保这个配置类被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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 20:09:06