在 RDBMS 中保存 REST API JSON

有带有 REST API 的 WebApp。我必须使用 JSON 格式的 API,然后将其保存在 RDBMS 中。JSON 基本上是属性和子属性的列表。我必须将它们映射到数据库列。

我认为合适的数据库模式尚未创建。我正在寻找的是将 JSON 映射到 Java DTO,然后将 DTO 映射到实体的最佳方法。我打算使用 JACKSON 将 JSON 映射到 DTO。我可能会也可能不会映射所有属性。然后在下一步中,我计划编写将 DTO 映射到实体的手动映射器。

我必须使用 RDBMS (MySQL) 而不是 NoSQL,因为其他将从 DB 读取数据的工具是基于 SQL 查询的。

编辑:应该使用 RDBMS 的商业报告工具具有一些有限的 SQL 查询功能,不能在那里执行任何高级 SQL 或业务逻辑。所以我不能将 JSON 保存为字符串,然后在报告工具中对其进行标记。

对此有任何想法吗?我知道它可能会直接将 JSON 转换为实体,但在此建议中建议不要这样做:将 JSON 对象映射到 Hibernate 实体

有没有更好的方法来做到这一点,或者我计划的方法是好的开始?


ABOUTYOU
浏览 91回答 2
2回答

侃侃尔雅

只有一种POJO型号我同意,一般来说,对和库使用相同的POJO结构并不是最好的选择。但这也取决于您需要实现的给定场景。在您的情况下,您需要从中加载数据并将结果存储在.&nbsp;因此,基本上您将在 90% 的情况下调用查询。因此,您可以保持结构非常简单,而不必担心任何问题。在这种情况下,使用相同的结构并不是那么糟糕。链接的问题/答案仅说明阅读和揭示结构的问题,在这个问题中不是这种情况。HibernateJacksonREST APIDBINSERTPOJOlazy-loadingPOJODBREST API您还需要了解DB模型与JSON模型的不同之处。如果它们相似并且您可以说1:1没有必要创建额外的图层。两种POJO型号在这种情况下,您需要创建两个POJO模型:一个用于处理JSON反序列化,一个用于处理DBvia&nbsp;ORM。在这种情况下,最大的问题是映射这两个模型。此外,变化会REST API传播到每一层。您当然可以使用Dozer、Orika、MapStruct或其他地图库,但始终需要维护该图层。从另一方面来看,这是非常安全的解决方案,因为您可以分别控制到JSON和到的映射DB并保持不同的结构,而无需许多注释或自定义反序列化器、适配器等。另一方面,如果这两个模型确实不同,则此解决方案是最好的。集合和一个POJO模型我还看到了第三个选项,它使用Java集合库来处理JSON有效负载。JSON Object适合Map<String, Object>和JSON array适合List<Object>。Jackson自动注意选择正确的类型,您只需将这些集合映射到侧面POJO使用的模型ORM。该解决方案消除了保留两个模型的需要,但它使映射层复杂化并使其模糊。根据您提供的信息,我将从第一个选项开始。以防万一,在某些库的帮助下生成额外的模型和映射层变得复杂,这应该不是什么大问题。

炎炎设计

一般来说,这种方法是正确的。但细节取决于您将要使用的框架/ORM(如果有的话)。如果您想使用 JPA/Hibernate 进行持久性 - 您需要一个实体类,它永远不应该用作 DTO。如果您有一些自定义持久性,您可能完全跳过实体类,而只使用 DTO 来填充查询参数。但是实现这种解决方案的最简单和最常见的方法是使用 Spring 框架,该框架将使用 Jackson 自动将您的 JSON 映射到 DTO,并使用 Spring Data JPA 进行持久性。在这种情况下,剩下的唯一工作就是将 DTO 映射到实体。这可以手动实现,但也可以使用会生成映射器的框架(如MapStruct )来完成。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java