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

如何在Swagger Codegen生成的接口中避免默认方法实现?

如何禁用Swagger Codegen Maven插件生成接口中的Default实现?

我来帮你解决这个问题——要让swagger-codegen-maven-plugin生成的Java接口不带default空实现,其实有两种常用的方法,根据你的需求选择即可:

方法一:使用interfaceOnly参数(推荐,简单直接)

swagger-codegen插件本身提供了一个interfaceOnly配置参数,当设置为true时,插件只会生成纯抽象的API接口,不会给方法添加任何default实现。

把你的Maven插件配置补全,加上这个参数就行:

<plugin>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-codegen-maven-plugin</artifactId>
    <version>2.2.3</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <!-- 指定Swagger文档地址 -->
                <inputSpec>http://petstore.swagger.io/v2/swagger.json</inputSpec>
                <!-- 生成语言为Java -->
                <language>java</language>
                <!-- 关键配置:只生成纯接口,禁用default实现 -->
                <interfaceOnly>true</interfaceOnly>
                <!-- 可选:配置生成的API和模型类的包路径 -->
                <apiPackage>com.yourcompany.api</apiPackage>
                <modelPackage>com.yourcompany.model</modelPackage>
            </configuration>
        </execution>
    </executions>
</plugin>

执行mvn generate-sources后,生成的接口就会是纯抽象方法,比如:

public interface PetApi {
    ResponseEntity<Pet> addPet(Pet pet);
    ResponseEntity<Void> deletePet(Long petId);
    // ... 其他抽象方法
}

方法二:自定义Mustache模板(适合深度定制)

如果你需要对接口生成逻辑做更多自定义(比如调整方法注释、参数格式等),可以修改插件使用的Mustache模板:

  1. 找到swagger-codegen默认的Java API模板api.mustache(你可以从插件的jar包中提取,或者在官方仓库找到)
  2. 复制模板到你的项目目录,比如src/main/resources/swagger-templates
  3. 修改模板中的方法实现部分:
    • 默认模板里会生成带default关键字的空实现,把这部分改成纯抽象方法声明:
      // 原模板内容
      default {{returnType}} {{operationId}}({{#allParams}}{{dataType}} {{paramName}}{{^last}}, {{/last}}{{/allParams}}) {
          // default implementation
          return null;
      }
      
      修改为:
      {{returnType}} {{operationId}}({{#allParams}}{{dataType}} {{paramName}}{{^last}}, {{/last}}{{/allParams}});
      
  4. 在Maven插件配置中指定自定义模板目录:
    <configuration>
        <!-- 其他配置 -->
        <templateDirectory>${project.basedir}/src/main/resources/swagger-templates</templateDirectory>
    </configuration>
    

这样插件就会使用你修改后的模板生成接口,完全去掉default实现。

内容的提问来源于stack exchange,提问作者awattez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:07:45