如何在 Wildfly 中的 Swagger 3.0 中定义 basePath
How to define basePath in Swagger 3.0 inside Wildfly
我在我的 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 应用程序中。
更新:
在documentation之后,basePath似乎来自Swagger,OpenApi使用server。
然后我试了:
@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);
}
}
}
但是还是没有考虑到
有线索吗?
谢谢 :-)
最后,我让它工作了,但不是使用未考虑的 Java 配置(在调试中看到)而是使用配置文件 openapi.yaml 在应用程序的类路径中。
文件看起来像:
prettyPrint: true
cacheTTL: 0
openAPI:
servers:
- url: /my_app
info:
version: '1.0'
title: Swagger application
现在可以正确处理服务器 url。
但我仍然很想知道 Java 配置的正确解决方案应该是什么。
我遇到了同样的问题,出于某种原因,您使用 openapi.yaml 的解决方案对我也不起作用。
然后我发现您可以将服务器注释与您的 service/resource class:
@Path("/myservice")
@Server(url="/my_app")
public interface MyService {
...
}
在全球范围内提供,它在 java
中运行良好
@OpenAPIDefinition(servers = @Server(url="/my_app"))
@ApplicationPath("api")
public class ApplicationConfig extends Application {
}
我在我的 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 应用程序中。
更新: 在documentation之后,basePath似乎来自Swagger,OpenApi使用server。 然后我试了:
@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);
}
}
}
但是还是没有考虑到
有线索吗?
谢谢 :-)
最后,我让它工作了,但不是使用未考虑的 Java 配置(在调试中看到)而是使用配置文件 openapi.yaml 在应用程序的类路径中。
文件看起来像:
prettyPrint: true
cacheTTL: 0
openAPI:
servers:
- url: /my_app
info:
version: '1.0'
title: Swagger application
现在可以正确处理服务器 url。
但我仍然很想知道 Java 配置的正确解决方案应该是什么。
我遇到了同样的问题,出于某种原因,您使用 openapi.yaml 的解决方案对我也不起作用。
然后我发现您可以将服务器注释与您的 service/resource class:
@Path("/myservice")
@Server(url="/my_app")
public interface MyService {
...
}
在全球范围内提供,它在 java
中运行良好@OpenAPIDefinition(servers = @Server(url="/my_app"))
@ApplicationPath("api")
public class ApplicationConfig extends Application {
}