2017-08-09 75 views
3

我有一个很简单的问题:)如何使用swagger codegen为动态feign basePath生成URI参数?

根据假装文件,它们在改变佯客户对象的基本路径动态地通过传递URI参数支撑槽API函数like so

很好的例子:

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

事情是我使用的招摇,谁从YAML文件并添加注释@Param所有函数的参数,这是不好的,我产生我的API。

糟糕的例子:

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

有没有一种方法,使招摇发生器产生一个URI PARAM的API,而@Param注释?

期望的结果实施例:

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

为了得到这个,你将不得不修改模板和生成器,你可以在github上打开一个问题作为feign生成器的增强或者建议,因为这是该语言的一部分。首先,您必须能够区分yaml中的URI参数,然后才能在生成器中对其进行解析,并在模板中正确显示并为此生成代码。 – moondaisy

+0

非常感谢@moondaisy!对,我需要更改模板,但不一定是生成器。我可以使用配置让swagger使用我的新模板。无论我会建议这个增强,如你所建议的那样鼓吹:) – dorony

+1

虽然有效,但它会在所有接口的所有方法中放入URI参数,尽管你可能想要一些没有它的方法,这就是为什么我建议修改发电机。很高兴你找到了解决方案! – moondaisy

回答

4

初始溶液:

经过一番研究我认识到,有在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> 

而且自定义模板文件夹里面,把自己的api.mustache文件与额外的 “URI基本路径” 参数:

... 
{{#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模板文件ING。 在上面的示例中,我修改(并覆盖)java.libraries.feign/api.mustache文件,因为这也是我的插件配置的文件(如示例中所示)。

相关问题