gpt4 book ai didi

java - 如何使用 Jersey 和 BeanConfig 更改 swagger 的路径?

转载 作者:行者123 更新时间:2023-11-30 03:03:33 29 4
gpt4 key购买 nike

有没有办法让 swagger.json 位于默认位置 (/swagger.json) 之外的其他位置?现在它总是部署到 http://localhost:8080/swagger.json,我想将它部署在 http://localhost:8080/api-docs/swagger。 json

setup guide没有多大帮助。它说的只是

swagger.api.basepath should point to the context root of your API. This defers from server to server and how you configured your JAX-RS application

但那是针对 servlet 配置的,我什至不确定这是否能达到我想要的效果。

BeanConfig 有一个 basePath 属性,但这纯粹是提供信息的,更改它不会对实际位置产生任何影响。

最佳答案

BeanConfig 基本路径,您不想更改。这就是 Swagger 在 swagger.json 中为资源端点创建 URL 的方法。

要做的想要更改的是提供swagger.json的资源类的路径。这将是 ApiListingResourceApiListingResourceJSON 。在大多数情况下,很可能是前者。

要更改路径,我们需要做的是以与通常注册方式不同的方式注册它,因为资源类上的 @Path 注释值为 / 。因此,如果我们像任何其他资源类一样注册,它将始终与我们的 Jersey 应用程序的根路径相同。

Jersey 有一个 API,允许我们build resources programmatically 。因此,我们可以从 ApiListingResource 构建资源,只需更改路径

final Resource.Builder builder = Resource.builder(ApiListingResource.class);
// note, this path will be relative your base path of your Jersey app
builder.path("api-docs");
final Resource apiListingResource = builder.build();

然后只需使用您的 ResourceConfig 注册Resource即可。

ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.registerResources(apiListingResource);

您需要确保不要做的一件事是禁用 SwaggerSerializers ,用于将 Swagger 对象序列化为 swagger.json。例如,如果您在 Jersey 中注册了 swagger,则通过扫描 io.swagger.jaxrs.listing 包,ApiListingResourceSwaggerSerializers 都在那个包,所以他们两个都会被注册。在我们的例子中,我们应该从要扫描的包列表中取出这个包,然后单独注册 SwahggerSerializers

resourceConfig.register(SwaggerSerializers.class);

关于java - 如何使用 Jersey 和 BeanConfig 更改 swagger 的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35365596/

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