如何正确使用从 swagger 规范生成的服务器存根?

How to properly use the server stubs generated from a swagger specification?

我正在使用 Swagger 2.0 和 swagger-codegen(实际上是 Maven 的 swagger-codegen-plugin)来指定、记录和生成 API,目标语言是 Java。

该项目已设置为构建服务器存根 (JAX-RS) 和文档,Eclipse 可识别项目 buildPath 中生成的代码。

我不确定从这里开始的正确工作流程是什么。 :-/

我认为我不应该修改生成的 类,否则每当我更改 swagger 规范时我的更改都会被覆盖,我希望它会随着我对 [=21= 的更多思考而改变] 随着开发的进行。

那我该怎么办?从生成的 类(哪些?)继承或将它们包含在我自己的 类?

我相信您需要更新 Impl 类,例如PetApiServiceImpl.

如果您想在代码重新生成期间跳过某些文件(例如Impl 类),您可以将这些文件添加到.swagger-codegen-ignore.

这里的解决方案有两个步骤。

  1. 将 **/*Controller.java 或 **/*Impl.java 添加到 .swagger-codegen-ignore 文件。根据使用的语言,默认实现在 *Controller.java 或 *Impl.java 文件中提供。一旦从生成中排除了默认实现,您就可以在自己的 class 中实现生成的接口。您自己 class 中的代码不会在 mvn clean 上刷新。

  2. .swagger-codegen-ignore 文件本身是一个 auto-generated 文件,因此当您执行 mvn clean 时,无论您在第 1 步中添加什么,都会刷新。为避免这种情况,请将您的 .swagger-codegen-ignore 版本保留在您的资源文件夹中,并将以下插件添加到您的 pom,以便在 Maven 生命周期开始时复制该文件:

    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-resources-plugin</artifactId>
     <executions>
      <execution>
       <id>copy-resources</id>
       <phase>initialize</phase>
       <goals>
        <goal>copy-resources</goal>
       </goals>
       <configuration>
        <outputDirectory>${project.build.directory}/generated/swagger</outputDirectory>
        <resources>
         <resource>
          <directory>${basedir}/src/main/resources</directory>
          <includes>
           <include>.swagger-codegen-ignore</include>
          </includes>
         </resource>
        </resources>
       </configuration>
      </execution>
     </executions>
    </plugin>