首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >openapi生成器类型记录-角将数字添加到方法名称的末尾

openapi生成器类型记录-角将数字添加到方法名称的末尾
EN

Stack Overflow用户
提问于 2020-10-05 10:05:12
回答 1查看 1.3K关注 0票数 4

Description我有一个来自spring服务器的公开文件,我正在使用这个脚本生成一个类型记录角客户机

openapi生成器-cli生成-g类型记录-角-i ./src/app/data/open-api.json -o ./src/app/data/build/openapi

系统中有重复的api名称。

简单结构

Controller1 :得到,列表,删除,.Controller2 :得到,列表,删除,..

生成的类如下所示

代码语言:javascript
复制
Controller1Service{
public get1 ....
public list1 .....
}
Controller2Service{
public get2 ....
public list2 .....
}

但是这些函数在同一个控制器中是唯一的,并且生成器仍然在它们中添加数字。

使用npm的openapi生成器版本4.3.1

OpenAPI声明文件内容或url命令行,用于生成openapi生成器-cli生成-g类型记录-角-i ./src/app/data/open-api.json -o ./src/app/data/-g/openapi

有什么办法让这些数字消失吗?

更新后端时,可能会在内部更改数字,这将导致手动代码重构。

EN

回答 1

Stack Overflow用户

发布于 2021-02-02 12:51:38

模板中,数字来自“昵称”属性。

OpenAPI的内部构件中,这是在生成打开的api.json文件时从operationId生成的。

Spring的解决方案(以及其他类似的解决方案,适应.)是调整operationId生成(原始答案)。

要使生成的代码仍然匹配公共接口(就像使用通用Spring控制器时一样),operationId必须匹配引用(默认:处理方法名)。下面是我使用的内容(ChangeController.class是通用的,大约80%的API是通用的)。

代码语言:javascript
复制
@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;
    };
}

重要注意:这将在生成角客户端时在规范验证上产生错误,显式禁用验证(skipValidateSpec)。

此外,对于使用角10+的生成,openapi生成器5.0.0是必需的(对于一般的ModuleWithProviders)。

代码语言:javascript
复制
<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>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64206487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档