2017-08-09 7 views
3

は、API関数like soの谷:swagger codegenを使用して動的パスのbasePathのURIパラメータを生成する方法は?私は文書を装うために従えば、かなり簡単な質問:)</p> <p>を持って、彼らはURIパラメータを渡すことによって、動的に装うクライアントオブジェクトのbasePathをを変更するにはサポートされている

GOOD例:

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

事は、私は私のために良いではありません、すべての関数パラメータにYAMLファイルと追加@Param注釈、から私のAPIを生成闊歩し、使用しています。

BAD例:

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

@Param注釈なしで、URIのPARAMとAPIを生成するために闊歩ジェネレータを作成する方法はありますか?

望ましい結果例:

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

これを取得するには、テンプレートとジェネレーターの両方を変更する必要があります。これは言語の一部であるため、gignubの問題をfeignジェネレーターの改善または提案として開くことができます。まず、yaml内のURIであるパラメータを区別することができなければなりません。そうすればジェネレータで異なる構文解析が可能になり、テンプレート内に正しく表示され、生成されたコードが正しく表示されます。 – moondaisy

+0

ありがとう@moondaisy!私はテンプレートを変更する必要がありますが、必ずしもジェネレータを変更する必要はありません。私は構成を使用して、新しいテンプレートを使いこなせるようにすることができます。いずれにしても、あなたが示唆しているように、このような拡張を提案します:) – dorony

+1

これはうまくいきますが、すべてのインターフェイスのすべてのメソッドに 'URI'パラメータを入れます。ジェネレータ。あなたが解決策を見つけてうれしい! – moondaisy

答えて

4

初期ソリューション:

いくつかの調査の後、私はクライアントAPIの機能の一部として、URIパラメータを生成するためのswagger-codegen 2.2.3でのサポートがないことを認識するようになりました。

しかし の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> 

そしてカスタムテンプレートフォルダ内の、追加の "URI basePathを" パラメータを使用して独自のapi.mustacheファイルを置く:

... 
{{#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ファイルを変更(オーバーライド)しています。これは、これもMy Pluginが設定されているファイルであるためです(例のように)。

関連する問題