首页 > 解决方案 > 有没有办法做多租户 Swagger?

问题描述

我正在开发一个需要迁移到多租户的 Spring Boot 应用程序。最大的变化之一是核心与扩展模型的概念。核心模型包含所有租户共有的数据结构,然后他们可以通过满足其特定业务需求的附加字段来扩展核心模型。

几乎一切都很好,但我被 Swagger 绊倒了。我们的所有服务都具有良好的 Swaggers 是公司的要求,坦率地说,我很难找到解决方案。

首先,为了处理负载结构的动态特性,我们没有使用 Spring 将 POJO 自动序列化为 JSON。我们手动进行,以便处理分离/组合核心和扩展模型。这意味着我们的控制器方法看起来像这样:

public String method(HttpServletRequest request) {
    // Do stuff
}

这立即削弱了 SpringFox Swagger 自动神奇地识别 API 结构的方式。

但事实上,这些方法的请求/响应主体各不相同。对于不同的租户,结构会略有不同。API 本身没有改变,核心模型始终相同,但不同的扩展数据集在起作用。

是否有任何 SpringFox/Swagger 功能可以对此有所帮助?

标签: spring-bootswagger

解决方案


您可以将 POJO 与嵌入Map<String, Object>的租户特定扩展结合使用吗?然后,您可以记录核心模型字段。

例如

@ApiModel(value = "MyPoJo", description = "My POJO")
@Builder
@JsonIgnoreProperties(ignoreUnknown = true)
@Value
public class MyPoJo {
  @ApiModelProperty(value = "My string field", required = true)
  String string;
  @ApiModelProperty(value = "My integer field")
  int integer;
  @ApiModelProperty(value = "Tenant specific custom attributes")
  Map<String, Object> customAttributes;
}

推荐阅读