如何从现有的Spring Boot App生成OpenApi 3.0规范?

时间:2019-05-01 14:55:02

标签: spring-boot kotlin swagger openapi

我有一个项目(Spring Boot App + Kotlin),我希望有一个Open API 3.0规范(最好在YAML中)。 Springfox库很好,但是它们生成Swagger 2.0 JSON。从控制器中的注释生成Open Api 3.0规范的最佳方法是什么?从头开始编写它是唯一的方法吗?

5 个答案:

答案 0 :(得分:5)

我们在kotlin项目中使用了springdoc-openapi库,它满足了我们使用spring boot项目自动生成API文档的需求。

它会自动将swagger-ui部署到spring-boot应用程序

Swagger UI页面应该在以下位置可用: -http://server:port/context-path/swagger-ui.html OpenAPI说明将在以下json格式的URL处提供: -http://server:port/context-path/v3/api-docs

将库添加到项目依赖项列表中(无需其他配置)

 <dependency>
      <groupId>org.springdoc</groupId>
      <artifactId>springdoc-openapi-ui</artifactId>
      <version>1.1.30</version>
  </dependency>

答案 1 :(得分:2)

我决定实现自己的生成器https://github.com/jrcodeza/spring-openapi,也许您也可以检查一下。它基于反射并支持javax和spring注释。它还根据Jackson注释生成继承模型(带有区分符)。此外,如果您想更改生成过程(例如,当您拥有自己的注释并且需要调整生成的模式部分时),则可以定义自己的拦截器。您可以在运行时模式下使用它,也可以将其用作Maven插件。还有Java API客户端生成器的OpenAPI3,它根据openapi3规范生成模型。再次生成Javax注释和Jackson注释以正确继承。

答案 2 :(得分:1)

如果您使用的是jax-rs,则本教程会有所帮助。它使用Apache CXF实现。我找不到使用Spring Boot并生成Open API 3.0规范的jaxrs的其他实现。

您将需要以下行为:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-rs-service-description-openapi-v3</artifactId>
    <version>3.2.4</version>
</dependency>

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>swagger-ui</artifactId>
    <version>3.13.6</version>
</dependency>

这是常规配置,更多细节在链接中:

@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackageClasses = PeopleRestService.class)
public class AppConfig {
    @Autowired private PeopleRestService peopleRestService;
    @Bean(destroyMethod = "destroy")
    public Server jaxRsServer(Bus bus) {
        final JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();
        factory.setApplication(new JaxRsApiApplication());
        factory.setServiceBean(peopleRestService);
        factory.setProvider(new JacksonJsonProvider());
        factory.setFeatures(Arrays.asList(new OpenApiFeature()));
        factory.setBus(bus);
        factory.setAddress("/");
        return factory.create();
    }
    @Bean
    public ServletRegistrationBean cxfServlet() {
        final ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new CXFServlet(), "/api/*");
        servletRegistrationBean.setLoadOnStartup(1);
        return servletRegistrationBean;
    }
}

https://dzone.com/articles/moving-with-the-times-towards-openapi-v300-adoptio

答案 3 :(得分:0)

您可以查看spring-restdocsrestdocs-api-spec

spring-restdocs对API文档采用了测试驱动的方法,与spring-fox使用的内省驱动的方法相比,它具有许多优势。 restdocs-api-spec是spring-restdocs的扩展,增加了API规范支持。目前,它支持OpenAPI2,OpenAPI3和Postman。

答案 4 :(得分:0)

您也可以参考 https://www.baeldung.com/spring-rest-openapi-documentation 其中提供了有关使用springdoc-openapi使用SpringBoot 1.x或2.x应用程序实现OpenAPI 3.0的教程。

总而言之,您只需将springdoc-openapi的maven依赖项添加到您的应用程序中,并在启动Run时转到路径 http://server:port/v3/api-docs.yaml/,您将下载yaml中的Open API 3.0规范文件,该文件是从应用程序的代码生成的。

您可以使用Springdoc-openapi进行其他操作,方法是在运行SpringBoot应用程序时访问以下内容: