【问题标题】:Generate Spring MVC controller from Swagger/OpenAPI从 Swagger/OpenAPI 生成 Spring MVC 控制器
【发布时间】:2016-10-18 09:28:29
【问题描述】:

有没有办法从 Swagger/OpenAPI 规范生成控制器 Spring MVC 代码?

我知道 Swagger 可以从现有的 Spring 代码中生成,但这可能反过来吗?

【问题讨论】:

    标签: java http spring-mvc swagger openapi


    【解决方案1】:

    您基本上是在寻找 swagger 服务器端代码的生成。如果您想在构建应用程序时生成它并且使用 maven,则可以使用以下插件:

    <plugin>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-codegen-maven-plugin</artifactId>
    <version>${swagger.codegen.version}</version>
    <executions>
      <execution>
        <goals>
          <goal>generate</goal>
        </goals>
        <configuration>
          <inputSpec>${swagger.yaml.file}</inputSpec>
          <language>spring</language>
          <configOptions>
            <sourceFolder>${swagger.generated.sourcepath}</sourceFolder>
            <!-- <interfaceOnly>true</interfaceOnly> -->
            <dateLibrary>java8</dateLibrary>
          </configOptions>
          <typeMappings>
            <typeMapping>OffsetDateTime=Instant</typeMapping>
          </typeMappings>
          <importMappings>
            <importMapping>java.time.OffsetDateTime=java.time.Instant</importMapping>
          </importMappings>
          <modelPackage>${project.groupId}.${project.artifactId}.swagger.model</modelPackage>
          <apiPackage>${project.groupId}.${project.artifactId}.swagger.api</apiPackage>
          <invokerPackage>${project.groupId}.${project.artifactId}.swagger.invoker</invokerPackage>
        </configuration>
      </execution>
    </executions>
    </plugin>
    

    请注意注释部分interfaceOnly 如果设置为true,它只会创建默认为NOT_IMPLEMENTED 的API 类,您必须编写实现。

    添加以下依赖:

    <dependency>
      <groupId>io.swagger</groupId>
      <artifactId>swagger-annotations</artifactId>
      <version>${swagger.annotations.version}</version>
      <scope>compile</scope>
    </dependency>
    

    我使用了以下属性:

    <properties>
        <swagger.codegen.version>2.4.1</swagger.codegen.version>
        <swagger.yaml.file>${project.basedir}/swagger.yaml</swagger.yaml.file>
        <swagger.annotations.version>1.5.21</swagger.annotations.version>
        <swagger.generated.sourcepath>src/main/java</swagger.generated.sourcepath>
    </properties>
    

    当 swagger 文件发生更改时,需要手动生成控制器的另一种静态方法是使用 swagger editor

    【讨论】:

    • 这会生成 Spring MVC 或 JAX_RS 代码吗?
    【解决方案2】:

    是的,可以从命令行使用swagger codegen 或使用swagger editor

    【讨论】:

    • “是的,有可能”不是一个答案,您应该提供您在哪里看到的,而不仅仅是提供对整个 swagger codegen 的引用。我不知道为什么@dev-null 接受了这个答案。
    • 我不确定@Vishrant 这里需要进一步详细说明。这些是可用于从给定规范生成实现的工具的链接。如果您真的考虑一下,这根本不是堆栈溢出/编程问题。
    • 不推荐使用 Swagger:“首先,为我生成的代码是使用 Java 7 和 Spring Boot 1.5.22,两者都已经过时了。其次,如果我们更改为规范(并且更改一直在发生),我们必须复制并粘贴手动更改的文件。”请参阅此博客:reflectoring.io/spring-boot-openapi
    • Swagger 值得关注的问题:(如何为 Java 8 版本生成代码?):github.com/swagger-api/swagger-codegen/issues/11158
    猜你喜欢
    • 2020-02-10
    • 2020-02-17
    • 2021-10-20
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    相关资源
    最近更新 更多