0
我正在寫一個Play 2.3應用程序,由支持json的客戶端的mongodb支持。該應用程序正在從Rails移植,並且我的許多現有mongo文檔都有超過22個字段,這些字段阻止了使用Json.format宏將它們序列化到案例類。我使用shapeless from this gist(我還沒完全理解)解決這個問題。在Play 2.3中寫入超過21個字段的JSON視圖
現在我面臨爲客戶端編寫JSON「視圖」的問題。並非我的文檔中的所有數據都應發送給客戶端 - 散列密碼等。要發送正確的數據,我正嘗試使用自定義Writes,但是又一次遇到了21字段限制問題。例如,下面的編譯失敗:
val viewWrites: Writes[User] = (
(__ \ "id").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String] and
(__ \ "u").write[String]
) { user: User =>
(user._id.toString(),
user.username,
user.username,
user.username,
user.username,
user.username,
user.username,
user.username,
user.username,
user.username,
user.username,
user.username,
user.username,
user.username,
user.username,
user.username,
user.username,
user.username,
user.username,
user.username,
user.username,
user.username)
}
與錯誤
play.api.libs.functional.FunctionalBuilder[play.api.libs.json.OWrites]#CanBuild22[String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String] does not take parameters
如果我刪除它會被正確編譯這些領域之一。我意識到,我就能把模型分解成幾個部分,但我不想這樣做,因爲:
- 我移植on Rails的Ruby中這個應用程序和客戶端已經預期特定格式的數據。我在rails上使用JBuilder來創建JSON視圖。我寧願不必修改客戶端。
- 有很多情況下需要寫入超過21個字段的JSON。我沒有任何意義,玩法框架會忽略這些用例。我覺得我必須錯過一個共同的解決方案。
我該如何編寫任意大小的JSON「視圖」,以期望的格式爲我的現有客戶端提供服務?
你知道在將來的Play版本中是否將更新讀/寫組合器格式來處理超過21個字段?這似乎是當前版本的一個相當大的省略。 – imagio 2014-12-04 19:15:21