当前位置: 首页 > 知识库问答 >
问题:

SwaggerUI中的Rest API版本头

柯宜年
2023-03-14

我想在Rest API(spring-mvc)文档中使用Springfox SwaggerUI。我在@RequestMapping注释中使用版本头,但是如果我有相同方法的两个版本,在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文档中只有一个可见的方法。

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

共有1个答案

汪弘毅
2023-03-14

经过一些研究,我找到了解决问题的方法,也许将来会帮助到别人。我使用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;
}
}
 类似资料:
  • 如何使用SpringBoot和SpringSecurity将基本授权(登录密码)与其他服务(google、github、facebook)的授权结合起来?有很多信息,我不知道如何正确解决这个问题。我将非常感谢教程或链接到材料。

  • SwaggerUI 汉化版;修改了部分样式;结合SpringFox SpringFox-Swagger-UI实现API管理

  • 有没有办法可以从springfox swagger-UI中删除“basic-error-controller”? 图片:

  • 我需要添加“列表类型”作为查询参数还是作为标题?如果作为查询参数,如何在URL中声明它。 我得到了以下响应,它不包含内容列表,只是关于bucket本身的信息: 任何帮助都将不胜感激。 谢谢你,艾哈迈德。

  • 问题内容: 有谁知道HTA文件使用的JavaScript版本。 当前正在创建一些脚本文件-并尝试利用 当作为HTA运行时-指出对象不支持该属性或方法的错误。我已经将其作为HTM文件运行以进行检查-完全没有问题。 因此,我只能假设它使用的是旧版JavaScript引擎。有人可以确认吗? 问题答案: 使用的JavaScript(或JScript)版本取决于三件事:已安装的Interner Explor

  • 以下的宏为configure脚本管理版本号。使用它们是可选的。 宏: AC_PREREQ version) 确保使用的是足够新的Autoconf版本。如果用于创建configure的Autoconf的版本比version 要早,就在标准错误输出打印一条错 误消息并不会创建configure。例如:AC—PREREQ(1.8) 如果你的'configure.in'依赖于在不同Autoconf版本中改