问题描述
说明 我有一个来自Spring Boot服务器的公开文件 我正在使用此脚本生成一个打字稿角度客户端
openapi-generator-cli生成-g typescript-angular -i ./src/app/data/open-api.json -o ./src/app/data/build/openapi
系统中的api名称重复
简单的结构
Controller1:[获取,列表,删除......] Controller2:[获取,列表,删除......] .....
生成的类如下
Controller1Service{
public get1 ....
public list1 .....
}
Controller2Service{
public get2 ....
public list2 .....
}
openapi-generator版本 4.3.1使用npm cli
OpenAPI声明文件的内容或URL 用于生成的命令行 openapi-generator-cli生成-g typescript-angular -i ./src/app/data/open-api.json -o ./src/app/data/build/openapi
那么有什么方法可以使这些数字消失?
更新后端时,内部数字可能会更改,这将导致手动代码重构
解决方法
来自 template 的数字来自“昵称”属性。
在 internals of OpenAPI 中,这是在生成 open-api.json 文件时根据 operationId 生成的。
Spring Boot 的解决方案(以及其他类似的,以适应...)是调整 operationId 生成 (original answer)。
为了让生成的代码仍然匹配一个通用接口(就像使用通用 Spring 控制器时一样), operationId 必须匹配一个引用(默认:处理方法名称)。 这是我使用的内容(ChangeController.class 是通用的,约占 API 的 80%)。
@Bean
public OperationCustomizer operationIdCustomizer() {
return (operation,handlerMethod) -> {
Class<?> superClazz = handlerMethod.getBeanType().getSuperclass();
if (Objects.nonNull(superClazz) && superClazz.isAssignableFrom(ChangeController.class)) {
operation.setOperationId(String.format("%s",handlerMethod.getMethod().getName()));
}
return operation;
};
}
重要说明:这将在生成 Angular 客户端时生成规范验证错误,请显式禁用验证 (skipValidateSpec)。
此外,对于使用 Angular 10+ 的生成,需要 openapi-generator 5.0.0(对于通用 ModuleWithProviders)。
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>5.0.0</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/../sic-frontend/src/app/api/openapi.json</inputSpec>
<generatorName>typescript-angular</generatorName>
<output>${project.basedir}/../sic-frontend/src/app/api</output>
<skipValidateSpec>true</skipValidateSpec>
<configOptions>
<ngVersion>10.0.0</ngVersion>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>