gpt4 book ai didi

spring - SwaggerUI 中的 Rest API 版本 header

转载 作者:行者123 更新时间:2023-12-03 18:27:21 26 4
gpt4 key购买 nike

我想将 Springfox SwaggerUI 用于我的 Rest API (spring-mvc) 文档。我在@RequestMapping 注释中使用版本 header ,但如果我有相同方法的两个版本,在 SwaggerUI 中我只能看到一个。

例如:

@GetMapping(value = "/users", headers = "X-API-VERSION=1")
public List<User> getUsersV1(){...}

@GetMapping(value = "/users", headers = "X-API-VERSION=2")
public List<User> getUsersV2(){...}

以上代码仅导致 api 文档中可见的一种方法。

考虑到我的版本 header ,是否有任何选项可以将 Swagger 配置为不同的端点?

最佳答案

经过一些研究,我找到了解决问题的方法,也许它会对将来的人有所帮助。我使用 PathDecorator 向路径添加“#v”后缀。

现在我可以在生成的文档中看到我的所有方法。

@Component
@Order(value = Ordered.HIGHEST_PRECEDENCE + 70)
public class VersionPathDecorator implements PathDecorator {
private final static Logger logger = LoggerFactory.getLogger(VersionPathDecorator.class);

@Override
public Function<String, String> decorator(PathContext context) {
return (path) -> {
StringBuilder sb = new StringBuilder(path);
Field parent = null;
try {
parent = PathContext.class.getDeclaredField("parent");
parent.setAccessible(true);
RequestMappingContext rmc = (RequestMappingContext) parent.get(context);
rmc.headers()
.stream()
.filter(h -> RequestHeader.X_API_VERSION.headerName.equals(h.getName()))
.map(NameValueExpression::getValue)
.findFirst()
.ifPresent(v -> sb.append("#v").append(v));

} catch (NoSuchFieldException | IllegalAccessException e) {
logger.error("path decoration failed", e);
}

return sb.toString();
};
}

@Override
public boolean supports(DocumentationContext documentationContext) {
return true;
}
}

关于spring - SwaggerUI 中的 Rest API 版本 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42792662/

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