Jackson 2 — Java 物件與JSON 相互轉換的好幫手

JSON是現在很流行的一種系統間交換資料的格式,結構簡單且容易閱讀,我們一起來看看怎麼使用Java 來玩玩JSON吧!

增加Maven dependency

使用的JSON lib 是 Jackson2 ,在POM.xml 只需加一個dependency

Java物件轉JSON

以下程式,我們將Java物件 (Department) 轉為JSON string,並輸出到 console
(也可以直接輸出到檔案,如最後一行所示)

輸出結果如下,第一段輸出 JSON string 無斷行,第二段使用了 writerWithDefaultPrettyPrinter() 來輸出我們容易閱讀的格式

JSON轉Java物件

相反地,我們也可以直接把JSON string或是檔案轉為Java物件

輸出結果如下

使用@JsonView來控制會顯示的欄位

有時候,我們可能會因應不同的情境,而回傳不同數量的欄位。舉例來說,User物件中的password欄位可能就不適合傳到前台去(資安考量),但後台管理系統的密碼維護功能可能會需要這欄位。我們當然可以視狀況多寫幾個欄位數量不一的User DTO,但Jackson2提供了一種更有效率的作法!

  1. 視需求定義不同的 view,如下所示,Public 表示資料出現在「公開場合」,Private 則為後台管理使用(必須繼承Public 因為後台可以看到所有欄位),view name 可自訂

  2. 在DTO 類別的欄位上,分別指定適用的view

  3. 在輸出JSON時,可指定要套用哪個 view 來輸出

    輸出結果如下,可以發現第一段輸出使用了Public view 所以看不到 password 欄位,而Private view 繼承了 Public view 所以全部的欄位都會顯示!

 

以上完整範例程式可參考 https://github.com/kennyliao1982/demo-jackson2