亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 RDBMS 中保存 REST API JSON

在 RDBMS 中保存 REST API JSON

ABOUTYOU 2022-07-27 11:18:09
有帶有 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 實體有沒有更好的方法來做到這一點,或者我計劃的方法是好的開始?
查看完整描述

2 回答

?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

只有一種POJO型號

我同意,一般來說,對和庫使用相同的POJO結構并不是最好的選擇。但這也取決于您需要實現的給定場景。在您的情況下,您需要從中加載數據并將結果存儲在. 因此,基本上您將在 90% 的情況下調用查詢。因此,您可以保持結構非常簡單,而不必擔心任何問題。在這種情況下,使用相同的結構并不是那么糟糕。鏈接的問題/答案僅說明閱讀和揭示結構的問題,在這個問題中不是這種情況。HibernateJacksonREST APIDBINSERTPOJOlazy-loadingPOJODBREST API

您還需要了解DB模型與JSON模型的不同之處。如果它們相似并且您可以說1:1沒有必要創建額外的圖層。

兩種POJO型號

在這種情況下,您需要創建兩個POJO模型:一個用于處理JSON反序列化,一個用于處理DBvia ORM。在這種情況下,最大的問題是映射這兩個模型。此外,變化會REST API傳播到每一層。您當然可以使用Dozer、Orika、MapStruct或其他地圖庫,但始終需要維護該圖層。從另一方面來看,這是非常安全的解決方案,因為您可以分別控制到JSON和到的映射DB并保持不同的結構,而無需許多注釋或自定義反序列化器、適配器等。另一方面,如果這兩個模型確實不同,則此解決方案是最好的。

集合和一個POJO模型

我還看到了第三個選項,它使用Java集合庫來處理JSON有效負載。JSON Object適合Map<String, Object>JSON array適合List<Object>。Jackson自動注意選擇正確的類型,您只需將這些集合映射到側面POJO使用的模型ORM。該解決方案消除了保留兩個模型的需要,但它使映射層復雜化并使其模糊。

根據您提供的信息,我將從第一個選項開始。以防萬一,在某些庫的幫助下生成額外的模型和映射層變得復雜,這應該不是什么大問題。


查看完整回答
反對 回復 2022-07-27
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

一般來說,這種方法是正確的。但細節取決于您將要使用的框架/ORM(如果有的話)。

如果您想使用 JPA/Hibernate 進行持久性 - 您需要一個實體類,它永遠不應該用作 DTO。如果您有一些自定義持久性,您可能完全跳過實體類,而只使用 DTO 來填充查詢參數。

但是實現這種解決方案的最簡單和最常見的方法是使用 Spring 框架,該框架將使用 Jackson 自動將您的 JSON 映射到 DTO,并使用 Spring Data JPA 進行持久性。

在這種情況下,剩下的唯一工作就是將 DTO 映射到實體。這可以手動實現,但也可以使用會生成映射器的框架(如MapStruct )來完成。


查看完整回答
反對 回復 2022-07-27
  • 2 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號