Swagger Codegen Maven Plugin生成客户端代码的依赖使用问题
解决Swagger生成客户端代码的使用与依赖问题
一、无需单独安装生成的客户端为依赖
直接将生成的源码目录纳入项目编译路径即可,你当前的插件配置缺少自动注册编译源目录的设置,补充以下配置到插件的<configuration>节点中:
<addCompileSourceRoot>true</addCompileSourceRoot> <output>${project.build.directory}/generated-sources/swagger</output>
添加<addCompileSourceRoot>true</addCompileSourceRoot>后,Maven会自动把生成的源码目录标记为项目编译源,编译时会包含这些代码,无需单独打包安装。
二、补充生成代码所需的依赖
生成的代码依赖不会自动同步到主项目的pom.xml,你需要手动添加:
- 打开
/target/generated-sources/swagger目录下的自动生成pom.xml,找到<dependencies>节点下的所有依赖项; - 将这些依赖复制到主项目的
pom.xml中,建议版本与Spring Boot内置的依赖版本保持一致(比如Jackson、OkHttp等)。
常见依赖示例:
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.11.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> <!-- 使用Spring Boot统一版本变量 --> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>1.6.14</version> </dependency>
三、使用生成的客户端代码
生成的代码核心是ApiClient类和各类XXXApi服务类,使用步骤如下:
- 初始化
ApiClient并配置基础参数:
ApiClient apiClient = new ApiClient(); apiClient.setBasePath("https://你的API服务地址"); // 配置超时时间 apiClient.setConnectTimeout(30000); apiClient.setReadTimeout(30000); // 添加认证头(如果需要) apiClient.addDefaultHeader("Authorization", "Bearer 你的令牌");
- 创建API服务实例并调用接口:
UserApi userApi = new UserApi(apiClient); // 调用接口示例:根据ID获取用户信息 User user = userApi.getUserById(123L);
如果想适配Spring Boot的依赖注入,可以把ApiClient和XXXApi注册为Bean:
@Configuration public class ApiClientConfig { @Bean public ApiClient apiClient() { ApiClient apiClient = new ApiClient(); apiClient.setBasePath("https://你的API服务地址"); return apiClient; } @Bean public UserApi userApi(ApiClient apiClient) { return new UserApi(apiClient); } }
之后在业务类中直接注入使用:
@Service public class UserService { private final UserApi userApi; public UserService(UserApi userApi) { this.userApi = userApi; } public User getUser(Long userId) throws ApiException { return userApi.getUserById(userId); } }
四、优化插件配置(可选)
如果想生成更贴合Spring Boot的客户端代码,可以在插件配置中指定library参数:
<configuration> <inputSpec>${project.basedir}/swagger-spec.json</inputSpec> <language>java</language> <library>spring-boot</library> <!-- 指定Spring Boot适配库 --> <addCompileSourceRoot>true</addCompileSourceRoot> <output>${project.build.directory}/generated-sources/swagger</output> <!-- 指定生成代码的包路径 --> <modelPackage>com.你的公司名.model</modelPackage> <apiPackage>com.你的公司名.api</apiPackage> </configuration>
这样生成的代码会自动适配Spring Boot的特性,比如支持@Autowired注入、自动配置HTTP客户端等。
内容的提问来源于stack exchange,提问作者Conner
相关产品推荐
相关产品推荐

