gpt4 book ai didi

swagger - 如何使用 swagger codegen 为动态 feign basePath 生成 URI 参数?

转载 作者:行者123 更新时间:2023-12-02 14:08:54 24 4
gpt4 key购买 nike

我有一个非常简单的问题:)

根据feign文档,他们支持通过api函数传递URI参数来动态更改feign客户端对象的basePathlike so :

好例子:

interface MyClient {
@RequestLine("GET /internal-service")
String internalService(URI baseUrl);
}

问题是我正在使用 swagger,它从 yaml 文件生成我的 API 并向所有函数参数添加 @Param 注释,这对我来说不好。

错误示例:

interface MyClient {
@RequestLine("GET {baseUrl}/internal-service")
String internalService(@Param("baseUrl") String host);
}

有没有办法让 swagger 生成器生成带有 URI 参数的 API,而不需要 @Param 注释?

期望结果示例:

interface MyClient {
@RequestLine("POST /internal-service")
String internalService(URI baseUrl, @Param("someParam") String someParam);
}

最佳答案

初步解决方案:

经过一番调查,我发现 swagger-codegen 2.2.3 中没有支持。用于生成 URI 参数作为客户端 API 函数的一部分。

但是swagger-codegen-maven-plugin中有一个选项配置的“templateDirectory - 包含 mustache 模板的目录”,用于提供包含 mustache 模板的文件夹的路径,该文件夹将采用该文件夹中的模板并覆盖具有相同名称的现有模板。

示例:

        <plugin>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<executions>
<execution>
<id>my-project-api-client-kit</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.build.directory}/my-project-api.yaml</inputSpec>
<language>java</language>
<configOptions>
<dateLibrary>java8</dateLibrary>
<sourceFolder>src/main/java</sourceFolder>
</configOptions>
<modelPackage>my.project.ck.resources.models</modelPackage>
<apiPackage>my.project.ck.resources.interfaces</apiPackage>
<library>feign</library>
<templateDirectory>/myTemplateFolder/</templateDirectory>
</configuration>
</execution>
</executions>
</plugin>

并在自定义模板文件夹中,放置您自己的 api.mustache 文件以及附加的“URI basePath”参数:

...
{{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}void {{/returnType}}{{nickname}}(URI basePath, {{#allParams}}{{^isBodyParam}}{{^legacyDates}}@Param("{{paramName}}") {{/legacyDates}}{{#legacyDates}}@Param(value="{{paramName}}", expander=ParamExpander.class) {{/legacyDates}}{{/isBodyParam}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});
...

注意:Swagger 提供了许多用于各种用途的模板,请确保根据您使用的情况获取并修改正确的 api.mustache 模板文件。在上面的示例中,我修改(并覆盖)了 java.libraries.feign/api.mustache 文件,因为这也是我的插件配置的文件(如示例中所示)。

关于swagger - 如何使用 swagger codegen 为动态 feign basePath 生成 URI 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45592746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com