从Swagger/OpenAPI生成Spring MVC控制器

3

有没有一种方法可以从Swagger/OpenAPI规范中生成Spring MVC控制器代码?

我知道Swagger可以从现有的Spring代码生成,但反过来是否可能呢?

2个回答

8
你基本上是在寻找生成 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编辑器

enter image description here


这会生成Spring MVC还是JAX_RS代码? - OSGI Java

4

4
“是的,这是可能的”并不是一个回答,你应该提供你在哪里看到这个信息,而不仅仅给出整个Swagger Codegen的参考。我不知道为什么@dev-null接受了这个回答。 - Vishrant
1
我不确定@Vishrant需要什么进一步的阐述。这些是链接到可以用来从给定规范生成实现的工具。如果你真的想想,这根本不是一个堆栈溢出/编程问题。 - Dilip Krishnan
不建议使用Swagger:“首先,为我生成的代码使用的是Java 7和Spring Boot 1.5.22,这两者都已经过时了。其次,如果我们对规范进行更改(并且更改经常发生),我们必须手动复制粘贴已更改的文件。” 请参阅此博客:https://reflectoring.io/spring-boot-openapi/ - OSGI Java
Swagger问题需要关注:(如何为Java 8版本生成代码?):https://github.com/swagger-api/swagger-codegen/issues/11158 - OSGI Java

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接