如何从不同模块生成客户端 api

How to generate client api from different module

我正在构建 2 个微服务。第一个名为 cart,第二个名为 product。它们都通过 swagger-codegen-maven-plugin 生成了 API,但是现在我希望 cart 微服务将从驻留在 yaml 文件定义中生成客户端 api产品模块(产品从中生成服务器客户端的模块)。我怎样才能做到这一点?有没有办法从不同的模块访问 yaml 文件?我必须有什么样的依赖?

            <plugin>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-codegen-maven-plugin</artifactId>
            <version>2.3.1</version>
            <executions>
                <execution>
                    <id>generate-cart-server</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <inputSpec>${project.basedir}/src/main/resources/static/api.yaml</inputSpec>
                        <language>spring</language>
                        <configOptions>
                            <dateLibrary>joda</dateLibrary>
                        </configOptions>
                    </configuration>
                </execution>
            </executions>
        </plugin>

只要在同一项目中,就可以使用相对路径。您必须添加多个 execution 标签才能同时生成产品客户端和购物车服务器。

<executions>
    <execution>
        <id>generate-cart-server</id>
        <goals>
            <goal>generate</goal>
        </goals>
        <configuration>
            <inputSpec>${project.basedir}/src/main/resources/static/api.yaml</inputSpec>
            <language>spring</language>
            <configOptions>
                <dateLibrary>joda</dateLibrary>
            </configOptions>
        </configuration>
    </execution>
    <execution>
        <id>generate-product-client</id>
        <goals>
            <goal>generate</goal>
        </goals>
        <configuration>
            <inputSpec>${project.basedir}/../product/src/main/resources/static/api.yaml</inputSpec>
            <language>java</language>
            <library>resttemplate</library>
            <configOptions>
                <dateLibrary>joda</dateLibrary>
            </configOptions>
        </configuration>
    </execution>
</executions>

使用 <language>java</language> 生成 Java 客户端代码并选择您想要与 <library>...</library> 一起使用的库。 RestTemplate 是 Spring 的一部分,但还有很多其他的。

引用自Baeldung

 Swagger Codegen supports the following Java libraries (pairs of HTTP 
clients and JSON processing libraries):

    jersey1 – Jersey1 + Jackson
    jersey2 – Jersey2 + Jackson
    feign – OpenFeign + Jackson
    okhttp-gson – OkHttp + Gson
    retrofit (Obsolete) – Retrofit1/OkHttp + Gson
    retrofit2 – Retrofit2/OkHttp + Gson
    resttemplate – Spring RestTemplate + Jackson
    rest-easy – Resteasy + Jackson

当然,您还需要将所选库添加到您的依赖项中。