2017-08-05 216 views
1

中識別無效的字段值我在我的應用程序中的Order對象這需要JSON格式如下。GSON反序列化

{ 
    "id" : "1001", 
    "amount" : 100.50 
    "customer" : { 
     "id" : "2001" 
     "name" : "Ned Stark" 
    } 
} 

這表示爲以下POJO。

public class Order 
{ 
    private long id; 
    private double amount; 
    private Customer customer; 
} 

我使用GSON來序列化和反序列化這個POJO。一切正常,直到JSON中給出的輸入值有效。

但是,當我給在JSON無效的數據類型值,GSON不會拋出特定的容易出錯的領域,但只是一個普通的異常的異常,這給應用程序不知道哪個字段值無效。

例如,如果我在JSON中給出數量爲「asdf」(而不是有效數字),在反序列化過程中Gson只拋出一個泛型NumberFormatException,但似乎沒有提供任何有關異常發生的信息當字段「金額」正嘗試設置與輸入值。

這將是通常有用的應用程序時,它具有易於錯誤傳達給客戶端。我認爲在GSON中應該有一些實現。

有沒有發現,已經引起反序列化失敗的特定字段中的任何格式?

+0

同樣的問題,我解決了只是添加對象映射器依賴和使用它轉換。你也可以在這裏配置多個東西。 – Jango

+0

謝謝Jango。我試過ObjectMapper。這會在JsonMappingException的toString調用中打印字段名稱,但它似乎並未將JSON字段作爲該異常中的數據公開 - 例如exception.getJSONKeyOfInvalidData() - 以便我可以將此設置爲響應JSON中的鍵客戶進行處理。 我在這裏錯過了什麼嗎? –

回答

0

而不是依賴於第三方庫,你可以寫序列之前驗證。

這樣你對郵件的完全控制,在錯誤的情況下進行通信。

+0

我只是想過不要重新發明輪子。串行器爲我做了轉換。我不喜歡在序列化之前迭代所有的JSON密鑰,然後讓序列化器在序列化的同時執行另一次迭代。 –