首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用swagger码生成动态伪basePath的URI参数?

如何使用swagger码生成动态伪basePath的URI参数?
EN

Stack Overflow用户
提问于 2017-08-09 05:54:40
回答 1查看 2.4K关注 0票数 4

我有一个很简单的问题:)

根据伪文档,它们通过api函数basePath 就像这样传递URI参数,从而支持动态更改假冒伪劣客户端对象的URI。

很好的例子:

代码语言:javascript
运行
AI代码解释
复制
interface MyClient {
    @RequestLine("GET /internal-service")
    String internalService(URI baseUrl);
}

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

的坏例子:

代码语言:javascript
运行
AI代码解释
复制
interface MyClient {
    @RequestLine("GET {baseUrl}/internal-service")
    String internalService(@Param("baseUrl") String host);
}

有没有一种方法可以使swagger生成器生成带有URI param的API,而不需要@Param注释?

期望的结果示例:

代码语言:javascript
运行
AI代码解释
复制
interface MyClient {
    @RequestLine("POST /internal-service")
    String internalService(URI baseUrl, @Param("someParam") String someParam);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-13 07:55:46

初步解决办法:

经过一些调查之后,我意识到swagger-码元2.2.3中不支持将URI参数作为client函数的一部分。

但是在swagger-codegen maven-plugin配置中有一个选项“带胡子模板的templateDirectory目录”,它为包含胡子模板的文件夹提供路径,该文件夹将接受该文件夹中的模板,并覆盖现有的同名文件夹。

示例:

代码语言:javascript
运行
AI代码解释
复制
        <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>

在自定义模板文件夹中,使用附加的"URI basePath“参数放置您自己的basePath文件:

代码语言:javascript
运行
AI代码解释
复制
...
{{#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.Library aries.fifen/api.mustrahe文件,因为这也是我的插件配置的文件(如示例中所示)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45592746

复制
相关文章

相似问题

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