Java 你如何改变昂首阔步';有球衣和BeanConfig的小路是什么?

Java 你如何改变昂首阔步';有球衣和BeanConfig的小路是什么?,java,jax-rs,jersey-2.0,swagger-2.0,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 这本书帮不了什么忙。它只说 swagger.api.basepath应指向api的上下文根。 这取决于不同的服务器以及您如何配置JAX-RS 应用 但这是servlet配置,我甚至不确定这是否符合我的要求 Bean

除了默认位置(
/swagger.json
)之外,还有什么方法可以让
swagger.json
坐在其他地方吗?现在它总是部署到
http://localhost:8080/swagger.json
,我想在
http://localhost:8080/api-docs/swagger.json

这本书帮不了什么忙。它只说

swagger.api.basepath应指向api的上下文根。 这取决于不同的服务器以及您如何配置JAX-RS 应用

但这是servlet配置,我甚至不确定这是否符合我的要求


BeanConfig
有一个
basePath
属性,但这纯粹是信息性的,更改它不会对实际位置产生任何影响。
BeanConfig
基本路径,您不想更改。这就是Swagger在
Swagger.json
中为您的资源端点创建URL的方法

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

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

泽西岛有一个API,允许我们。因此,我们可以从
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 resourceConfig = new ResourceConfig();
resourceConfig.registerResources(apiListingResource);
需要确保的一件事是禁用,它用于将
Swagger
对象序列化为
Swagger.json
。例如,如果您向Jersey注册了swagger,则通过扫描
io.swagger.jaxrs.listing
包,
ApiListingResource
swagger序列化程序都在该包中,因此它们都已注册。在我们的例子中,我们应该从要扫描的包列表中取出这个包,然后单独注册
SwahggerSerializers

resourceConfig.register(SwaggerSerializers.class);

谢谢除了我最初的问题之外,这是一个非常有教育意义的回答。据泽西岛的医生说,这应该行得通。然而,我已经尝试过了,但没有找到swagger.json。既不在原始文档中,也不在/api文档下(应在其中)。我进行了调试,Jersey似乎将其添加为任何其他模块。知道有什么遗漏吗?我已经测试过了,应该可以用了。只有resource类将位于
/api docs
下,但resource方法仍然是
swagger.json
,因此您需要在请求
/api docs/swagger.json
中组合它们,就像您的问题所建议的那样。此外,如果您使用的是ResourceConfig子类,您应该在构造函数中调用
registerResources
。您不应该像我在示例中所做的那样创建另一个ResourceConfig实例。。如果这不明显的话。