簡體   English   中英

Playframework,將Json Writes和Reads放在哪里可以重用?

[英]Playframework, where to put Json Writes and Reads for reuse?

我有兩個編寫和讀取相同AccountModel案例類的控制器。 此類是我的“域”對象Account的適配器,該對象將一些集合展平並將對象引用( Map[Role, Auth] )轉換為顯式鍵引用( Set[AuthModel(rolekey:String, level:Int)] )。

我想重用此AccountModel及其隱式的WritesReads但不知道如何實現“ scala方式”。

我想在一個object Models中將我的案例類作為內部類以及所有相關的隱式對象,但是我認為這很快將變得難以理解。


您過去經常做什么,將可重用的Json類放在哪里,有什么建議嗎?

非常感謝

主要有兩種方法。

方法1:將它們放在可序列化對象的伴隨對象上:

// in file AccountModel.scala
class AccountModel(...) {
  ...
}

object AccountModel {
  implicit val format: Format[AccountModel] = {...}
}

這樣,無論您在AccountModel導入AccountModel ,格式化程序都將可用,因此所有內容都將無縫運行。

方法2:使用JSON格式化程序准備特征:

// in a separate file AccountModelJSONSupport.scala
import my.cool.package.AccountModel

trait AccountModelJsonSupport {
  implicit val format: Format[AccountModel] = {...}
}

使用這種方法,每當需要序列化時,都必須將特征混合在一起,如下所示:

object FirstController extends Controller with AccountModelJsonSupport {
  // Format[AccountModel] is available now:
  def create = Action(parse.json[AccountModel]) { ... }
}

編輯:我忘了添加兩種方法的比較。 我通常會堅持方法1,因為它更直接。 但是,當同一類需要兩個不同的格式化程序,或者模型類不是您自己的並且不能修改時,則需要JSONSupport mixin策略。 感謝您在評論中指出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM