我在一个集群中运行两个不同的 Payara Micro 微服务。
我遇到的问题是,当我尝试访问 MyApp1 的 OpenAPI URL(如 http://mylink.com/myApp1/openapi)时这是行不通的。当我使用 URL http://mylink.com/openapi 时它实际上有效。
当我想查看其他微服务(例如 http://mylink.com/myApp2/openapi)的 API 时,这会成为一个问题这是行不通的。
Payara Micro 是否有办法告诉 OpenAPI 在其路径中使用应用程序的上下文,就像应用程序中的所有其他 URL 一样?
最佳答案
正如您在我之前的评论中看到的,我也遇到过同样的情况。
上下文 - openapi 和 microprofile
首先我要说的是,根目录中包含/openapi URL 是 microprofile-open 的预期行为。文档始终使用/openapi路径作为获取文档的权限LINK
在实现中,很明显这种行为是强制执行的: 在OpenApi的ServletContainerInitializer中可以看到以下代码
// Only deploy to app root
if (!"".equals(ctx.getContextPath())) {
return;
}
解决方法又名解决方案。
现在很明显,我们无法对此进行配置,因为这是预期的行为,一种解决方案(我建议的解决方案)是将/YOUR_APP/openapi 的请求代理到/openapi。 由于我的应用程序是 jax-rs 应用程序,部署在 openshift 上,并且我不想为此拥有专用的代理应用程序,因此我刚刚创建了一个简单的资源/ Controller 来为我代理此特定请求。 背后的出色方法:
@GET
@Path("")
public Response proxyOpenApiCall(){
log.debug("proxyOpenApiCall called");
String entity = client.target("http://localhost:8080")
.path("openapi").request()
.get(String.class);
return Response.ok(entity).build();
}
关于swagger - 如何告诉 OpenAPI 在其 URL 中使用应用程序的上下文根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60869968/