如何在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模板:
- 找到swagger-codegen默认的Java API模板
api.mustache(你可以从插件的jar包中提取,或者在官方仓库找到) - 复制模板到你的项目目录,比如
src/main/resources/swagger-templates - 修改模板中的方法实现部分:
- 默认模板里会生成带
default关键字的空实现,把这部分改成纯抽象方法声明:
修改为:// 原模板内容 default {{returnType}} {{operationId}}({{#allParams}}{{dataType}} {{paramName}}{{^last}}, {{/last}}{{/allParams}}) { // default implementation return null; }{{returnType}} {{operationId}}({{#allParams}}{{dataType}} {{paramName}}{{^last}}, {{/last}}{{/allParams}});
- 默认模板里会生成带
- 在Maven插件配置中指定自定义模板目录:
<configuration> <!-- 其他配置 --> <templateDirectory>${project.basedir}/src/main/resources/swagger-templates</templateDirectory> </configuration>
这样插件就会使用你修改后的模板生成接口,完全去掉default实现。
内容的提问来源于stack exchange,提问作者awattez
相关产品推荐
相关产品推荐

