spring-boot - 有没有办法做多租户 Swagger?
问题描述
我正在开发一个需要迁移到多租户的 Spring Boot 应用程序。最大的变化之一是核心与扩展模型的概念。核心模型包含所有租户共有的数据结构,然后他们可以通过满足其特定业务需求的附加字段来扩展核心模型。
几乎一切都很好,但我被 Swagger 绊倒了。我们的所有服务都具有良好的 Swaggers 是公司的要求,坦率地说,我很难找到解决方案。
首先,为了处理负载结构的动态特性,我们没有使用 Spring 将 POJO 自动序列化为 JSON。我们手动进行,以便处理分离/组合核心和扩展模型。这意味着我们的控制器方法看起来像这样:
public String method(HttpServletRequest request) {
// Do stuff
}
这立即削弱了 SpringFox Swagger 自动神奇地识别 API 结构的方式。
但事实上,这些方法的请求/响应主体各不相同。对于不同的租户,结构会略有不同。API 本身没有改变,核心模型始终相同,但不同的扩展数据集在起作用。
是否有任何 SpringFox/Swagger 功能可以对此有所帮助?
解决方案
您可以将 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;
}
推荐阅读
- javascript - 从不同文件导入的最佳方式
- javascript - 如何在 php 或 javascript 中获取 UTC 格式的客户端时区,例如 (UTC+05:00)
- libgdx - 如何正确更改屏幕尺寸
- c# - 从 Autofac 迁移的 DryIoC:无法使用 ResolveParameter 解决
- python - 我的烧瓶应用程序没有正确返回非 ascii 字符
- unity3d - 我遇到了一个错误,我的操纵杆没有保留在 cameraView 中
- google-bigquery - BigQuery 将数据导出到一个大文件中
- websocket - 刷新了 cn1lib 文件,但还是一样的错误:“ClassNotFoundException WebSocketNativeImplImpl”
- django - 有没有办法在 Django Rest Framework 中聚合一个字段,该字段将汇总一个字段
- php - Symfony 4:捕获异常