2014-11-20 115 views
4

定製JSON對象屬性名稱我使用噴霧JSON序列化的對象樹,其中基於一個類層次結構如此:與噴霧JSON

trait Base { 
    val _id: Long 
} 

case class Person(_id: Long, firstName: String, lastName: String) extends Base 
case class Company(_id: Long, name: String) extends Base 

當然,這是一個人爲的例子,真正的代碼庫包含許多類和字段。然而,這個想法是有一個特徵包含一些共同的價值。 現在的問題是,如果有一種方法我可以格式化JSON,而不是_id屬性名稱將只是id

現在你跳,並告訴延長JsonFormat之前,問題是我是否可以擴展Base所有類實現這個只是一次,但並不實現格式爲每個類的。正如我所提到的,有很多類,並且爲每個類實現自定義格式都會非常繁瑣,而且我認爲需要相當多的維護。例如,如果我可以在Base中註釋_id val,那就太好了。是否有任何事情可以避免爲每個類實現格式?

+4

您可以使用'jsonFormat(Person,「id」,「firstName」,「lastName」)'設置字段的名稱(而不是'jsonFormat3(Person)')。 – jrudolph 2014-11-21 07:57:08

+0

@jrudolph這並不理想,因爲我仍然需要爲每個班級分別定義它。不過,這可能是最簡單的方法去噴霧JSON。你能否在這裏把它寫成答案,以便我可以將其標記爲最佳答案?謝謝! – yby 2014-11-23 11:08:18

+2

啊,人們一直在使用的另一種可能性是重寫'ProductFormat.extractFieldNames'來提供名稱的一般映射。 – jrudolph 2014-11-24 07:13:35

回答

5

這裏是jrudolph的評論作爲答案,讓人們很容易看到。好的解決方案

您可以使用jsonFormat(Person, "id", "firstName", "lastName")設置 領域(而不是jsonFormat3(Person))的名稱。

jrudolph,如果您將您的評論更改爲答案,我會將其刪除。

+0

我想將此標記爲「最佳答案」,但我希望@jrudolph能夠獲得此分數...... :) – yby 2016-01-21 16:44:31