dor*_*ony 4 swagger swagger-2.0 netflix-feign feign swagger-codegen
我有一个很简单的问题:)
根据伪装文档,它们支持通过api函数传递URI参数来动态更改伪装客户端对象的basePath,如下所示:
好例子:
interface MyClient {
@RequestLine("GET /internal-service")
String internalService(URI baseUrl);
}
Run Code Online (Sandbox Code Playgroud)
关键是我正在使用swagger,后者从yaml文件生成我的API,并将@Param注释添加到所有函数参数,这对我不利。
不良示例:
interface MyClient {
@RequestLine("GET {baseUrl}/internal-service")
String internalService(@Param("baseUrl") String host);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让摇摇欲坠的生成器生成带有URI参数的API,而无需@Param批注?
预期结果示例:
interface MyClient {
@RequestLine("POST /internal-service")
String internalService(URI baseUrl, @Param("someParam") String someParam);
}
Run Code Online (Sandbox Code Playgroud)
初始解决方案:
经过一番调查,我发现swagger-codegen 2.2.3不支持将URI参数作为客户端API函数的一部分生成。
但是swagger-codegen-maven-plugin配置中有一个选项“ templateDirectory-带有胡须模板的目录”,用于提供包含胡须模板的文件夹的路径,该路径将获取该文件夹中的模板并使用相同的名称覆盖现有文件夹名称。
例:
<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>
Run Code Online (Sandbox Code Playgroud)
在自定义模板文件夹中,将您自己的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}});
...
Run Code Online (Sandbox Code Playgroud)
注意: Swagger提供了许多用于各种用途的模板,请确保根据使用的方式获取并修改正确的api.mustache模板文件。在上面的示例中,我修改(并覆盖)了java.libraries.feign / api.mustache文件,因为这也是我的插件也已配置的文件(如示例中所示)。
归档时间: |
|
查看次数: |
1135 次 |
最近记录: |