gpt4 book ai didi

Java - 如何直接从 openapi 3.0 规范生成 Swagger UI

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:28 32 4
gpt4 key购买 nike

我有 yaml 格式的 openapi 3.0 规范和从中生成代码的应用程序。除了生成 swagger ui 之外,一切正常。我使用 spring-fox 生成它,但它似乎从 Controller 生成 swagger ui 2.0 版本,这些 Controller 是根据 openapi 规范生成的。

如何直接从我的 3.0 规范而不是从 3.0 openapi 规范生成的 Controller 生成 swagger ui?

最佳答案

好吧,我已经解决了这个问题(虽然解决方案很麻烦)。

首先我添加了 swagger ui webjar -

        <plugin>
<!-- Download Swagger UI webjar. -->
<artifactId>maven-dependency-plugin</artifactId>
<version>${maven-dependency-plugin.version}</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.webjars</groupId>
<artifactId>swagger-ui</artifactId>
<version>${swagger-ui.version}</version>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>

然后我将我的 yaml 规范转换为 json 格式并将其复制到 swagger-ui webjar 目录:

            <plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>4.0.0-beta3</version>
<executions>
<execution>
<id>generate-spec</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${openapi-spec-file-location}</inputSpec>
<validateSpec>true</validateSpec>
<generatorName>openapi</generatorName>
<output>${project.build.directory}/classes/META-INF/resources/webjars/swagger-ui/${swagger-ui.version}</output>
</configuration>
</execution>
</executions>
</plugin>

接下来我们需要在swagger-ui中设置规范路径。根据swagger-ui API我们可以传递 spec JSON 变量而不是 url。因此,为了初始化此 spec 变量并编辑 swagger ui 渲染,我在 maven 中使用了 replacer 插件:

            <plugin>
<!-- Replace the OpenAPI specification example URL with the local one. -->
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
<version>1.5.3</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>replace</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<!-- Static index html with swagger UI rendering and OAS in JSON format. -->
<include>${project.build.directory}/classes/META-INF/resources/webjars/swagger-ui/${swagger-ui.version}/index.html</include>
<include>${project.build.directory}/classes/META-INF/resources/webjars/swagger-ui/${swagger-ui.version}/openapi.json</include>
</includes>
<regexFlags>
<regexFlag>CASE_INSENSITIVE</regexFlag>
<regexFlag>MULTILINE</regexFlag>
</regexFlags>
<replacements>
<!-- This replacement imports spec json variable into static html page. -->
<replacement>
<token>&lt;script&gt;</token>
<value>&lt;script src="./openapi.json"&gt; &lt;/script&gt;&lt;script&gt;</value>
</replacement>
<!-- This part replaces url input variable with spec variable. -->
<replacement>
<token>url:\s"https:\/\/petstore\.swagger\.io\/v2\/swagger\.json"</token>
<value>spec: spec</value>
</replacement>
<replacement>
<!-- This replacement initializes spec variable, that will be passed to swagger ui index.html. -->
<token>^\{</token>
<value>spec = {</value>
</replacement>
</replacements>
</configuration>
</plugin>

所以在构建之后的这一步,我们得到了带有 swagger ui 的静态资源。最后要做的是使用 Spring 为它提供服务。

@Configuration
@EnableWebMvc
public class SwaggerConfiguration implements WebMvcConfigurer {

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/3.22.0/");
}

//this method was introduced just for convenient swagger ui access. Without it swagger ui can be accessed with /index.html GET call
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/swagger-ui.html").setViewName("forward:/index.html");
}
}

原来如此。如果您评论此答案并指出如何简化此过程,那就太好了。

关于Java - 如何直接从 openapi 3.0 规范生成 Swagger UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55728744/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com