gpt4 book ai didi

spring - 如何使用Spring Boot设置SpringFox以显示Rest API的两个(或更多)版本?

转载 作者:行者123 更新时间:2023-12-03 00:33:13 25 4
gpt4 key购买 nike

我试图弄清楚如何使用Spring Fox管理我的API端点的两个(或更多)版本。

要对我的API进行版本控制,我使用的是Versioning through content negotiation,也称为Versioning using Accept header。使用标头信息分别控制每个端点的版本。例如,对于第一版,我使用属性produces

@Override
@PostMapping(
produces = "application/vnd.company.v1+json")
public ResponseEntity<User> createUser(


对于第二版,我使用:

@Override
@PostMapping(
produces = "application/vnd.company.v2+json",
consumes = "application/vnd.company.v2+json")
public ResponseEntity<User> createUserVersion2(


我不对第一个(v1)版本使用 consumes,因此如果客户端在呼叫中仅使用 application/json,则默认情况下将调用第一个版本。

我想在Swagger UI上显示两个版本。怎么做?

最佳答案

非常简单只需为每个版本创建一个Docket。

示例,第一个版本:

@Bean
public Docket customImplementation(
@Value("${springfox.documentation.info.title}") String title,
@Value("${springfox.documentation.info.description}") String description) {

return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo(title, description, "1.0"))
.groupName("v1")
.useDefaultResponseMessages(false)
.securitySchemes(newArrayList(apiKey()))
.pathMapping("/api")
.securityContexts(newArrayList(securityContext())).select()
.apis(e -> Objects.requireNonNull(e).produces().parallelStream()
.anyMatch(p -> "application/vnd.company.v1+json".equals(p.toString())))
.paths(PathSelectors.any())
.build();
}


对于第二版:

@Bean
public Docket customImplementationV2(
@Value("${springfox.documentation.info.title}") String title,
@Value("${springfox.documentation.info.description}") String description) {

return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo(title, description, "2.0"))
.groupName("v2")
.select()
.apis(e -> Objects.requireNonNull(e).produces()
.parallelStream()
.anyMatch(p -> "application/vnd.company.v2+json".equals(p.toString())))
.build();
}


这里的秘密是通过 produces属性过滤可用的端点。

Swagger-UI将在组合上显示两个版本:

enter image description here

此代码必须位于带有 @Configuration注释的类上。您还需要使用 @EnableSwagger2启用Swagger。

关于spring - 如何使用Spring Boot设置SpringFox以显示Rest API的两个(或更多)版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53615700/

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