如何解决openapi生成器typescript-angular将数字添加到方法名称的末尾
说明 我有一个来自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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。