有没有办法让 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
的资源类的路径。这将是 ApiListingResource
或ApiListingResourceJSON
。在大多数情况下,很可能是前者。
要更改路径,我们需要做的是以与通常注册方式不同的方式注册它,因为资源类上的 @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 包,ApiListingResource
和 SwaggerSerializers
都在那个包,所以他们两个都会被注册。在我们的例子中,我们应该从要扫描的包列表中取出这个包,然后单独注册 SwahggerSerializers
resourceConfig.register(SwaggerSerializers.class);
关于java - 如何使用 Jersey 和 BeanConfig 更改 swagger 的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35365596/