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

标签 java jax-rs jersey-2.0 swagger-2.0

有没有办法让 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/

相关文章:

java - string.equals() 返回错误值?

java - 遥不可及的声明,永无止境的倒计时

java - 如何在控制台中返回到行首?

rest - JAX-RS @PathParam 以变量参数开头

java - JAX-RS NoMessageBodyWriterFoundFailure

java - 如何将 JSON 对象添加到 Jax-rs 中的 JSON 响应中?

java - 服务于多个路径的 Jersey 资源类

java - URLConnection.getInputStream() : Connection timed out

spring-boot - Spring Boot 集成测试 Jersey JAX-RS 资源

java - 以 JSON 响应返回一个或多个文件 (Java-Jersey-ReST)