我在 Wildfly 应用程序中集成了 Swagger-ui。
该项目是通过 maven 配置的,具有以下(相关)依赖项:
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-jaxrs2</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-jaxrs2-servlet-initializer</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>swagger-ui</artifactId>
<version>3.23.2</version>
</dependency>
我还从 webjar 中提取了 swagger-ui.html 页面并自定义了 javascript 以连接到我的服务器,如下所示(请参阅 url):
window.onload = function() {
// Begin Swagger UI call region
const ui = SwaggerUIBundle({
url: "doc/openapi.json",
dom_id: "#swagger-ui",
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
})
// End Swagger UI call region
window.ui = ui
}
swagger-ui 运行良好,它显示了我的端点列表。但是当我尝试连接到我的端点时,它会失败,因为用于连接的 url 不包含我的应用程序的上下文路径(此处为myApp),它尝试连接:
curl -X GET "http://localhost:8080/aop/hello/version" -H "accept: */*"
但它应该是:
curl -X GET "http://localhost:8080/myApp/aop/hello/version" -H "accept: */*"
我发现缺少的部分被命名为 basePath,但我没有找到任何解决方案将它添加到我的 Wildfly 应用程序中。
更新: 按照文档,似乎 basePath 来自 Swagger,OpenApi 使用服务器。然后我尝试了:
@ApplicationPath("/api")
public class ApplicationConfig extends Application
{
public ApplicationConfig(@Context ServletConfig servletConfig) {
// Swagger Configuration
super();
OpenAPI oas = new OpenAPI()
.servers(Collections.singletonList(new Server().url("http://localhost:8080/my_app")));
Info info = new Info()
.title("Swagger");
oas.info(info);
SwaggerConfiguration oasConfig = new SwaggerConfiguration()
.openAPI(oas)
.prettyPrint(true);
try {
new JaxrsOpenApiContextBuilder<>()
.servletConfig(servletConfig)
.application(this)
.openApiConfiguration(oasConfig)
.buildContext(true);
} catch (OpenApiConfigurationException e) {
throw new ConfigurationException(e.getMessage(), e);
}
}
}
但它仍然没有被考虑在内。
有铅吗?
谢谢 :-)