差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
java:jackson:deepclone [2021/07/03 17:31]
tony [Problem]
java:jackson:deepclone [2023/06/25 09:48] (目前版本)
行 2: 行 2:
 ====== DeepClone with Jackson ====== ====== DeepClone with Jackson ======
 ===== Problem ===== ===== Problem =====
-最近因為有人code沒寫好的原因,造成了Optional之亂;而始作俑者聲稱這問題很難解,促成我寫這篇文章的原因。原始問題發生在透過Gson對有Guava Optional做為member的物件做deepClone時,會拋出例外:​+<del>最近因為有人code沒寫好的原因,造成了Optional之亂;而始作俑者聲稱這問題很難解,促成我寫這篇文章的原因。</​del>​原始問題發生在透過Gson對有Guava Optional做為member的物件做deepClone時,會拋出例外:​
 <code java> <code java>
 public class ParentObject { public class ParentObject {
行 13: 行 13:
 這個問題發生在Gson無法將Json內容轉回Guava Optional的物件。首先網上已有許多針對Optional使用的討論,這裡不涉及使用的議題;而以Gson來說,可以透過TypeAdapter去解決物件轉換的問題,請參考此[[https://​stackoverflow.com/​questions/​12161366/​how-to-serialize-optionalt-classes-with-gson|link]]。\\ 這個問題發生在Gson無法將Json內容轉回Guava Optional的物件。首先網上已有許多針對Optional使用的討論,這裡不涉及使用的議題;而以Gson來說,可以透過TypeAdapter去解決物件轉換的問題,請參考此[[https://​stackoverflow.com/​questions/​12161366/​how-to-serialize-optionalt-classes-with-gson|link]]。\\
 \\ \\
-本篇文章主要分享Jackson的解法。詳細程式碼可以參考[[https://​github.com/​frank007love/​JacksonPractice/​tree/​master/​src/​test/​java/​org/​tonylin/​practice/​jackson/​optional|link]]。+Jackson會有相同問題,本篇文章主要分享Jackson的解法。詳細程式碼可以參考[[https://​github.com/​frank007love/​JacksonPractice/​tree/​master/​src/​test/​java/​org/​tonylin/​practice/​jackson/​optional|link]]。
 ===== How to? ===== ===== How to? =====
 解決Jackson Json轉換問題的方法之一,是在欄位掛載@JsonSerialize與@JsonDeserialize,可以參考[[java:​jackson:​annotation:​jsonserialize:​convertdate|link]]。今天分享給大家的,是直接使用別人的做好的模組,來減少維護的負擔。 解決Jackson Json轉換問題的方法之一,是在欄位掛載@JsonSerialize與@JsonDeserialize,可以參考[[java:​jackson:​annotation:​jsonserialize:​convertdate|link]]。今天分享給大家的,是直接使用別人的做好的模組,來減少維護的負擔。
行 131: 行 131:
 </​code>​ </​code>​
 如果不是要求回應即時的系統,這三個值應都可以被接受。對Jackson熟悉的人,必定知道還有TokenBuffer的做法,可以提升效率;這部分之後有機會我會再提供教學。另外提供2021年針對Jackson VS Gson的實驗參考給大家:​ [[https://​www.ericthecoder.com/​2020/​10/​13/​benchmarking-gson-vs-jackson-vs-moshi-2020/​|link]],Jackson勝利。 如果不是要求回應即時的系統,這三個值應都可以被接受。對Jackson熟悉的人,必定知道還有TokenBuffer的做法,可以提升效率;這部分之後有機會我會再提供教學。另外提供2021年針對Jackson VS Gson的實驗參考給大家:​ [[https://​www.ericthecoder.com/​2020/​10/​13/​benchmarking-gson-vs-jackson-vs-moshi-2020/​|link]],Jackson勝利。
 +\\
 +\\
 +\\
 +友藏內心的獨白:​ 解一個問題不需要5分鐘,但寫篇教學花費我5個小時。
 ===== Reference ===== ===== Reference =====
   * [[https://​stackoverflow.com/​questions/​49903859/​deep-copy-using-jackson-string-or-jsonnode|Deep Copy using Jackson: String or JsonNode]]   * [[https://​stackoverflow.com/​questions/​49903859/​deep-copy-using-jackson-string-or-jsonnode|Deep Copy using Jackson: String or JsonNode]]