Play Mongo 是一個專門爲 Play Framework 開發的 MongoDB 模塊,該模塊提供了一個隱式方法可以簡化 Play Json 的開發工作。
通常情況下,我們需要藉助 Play Json 提供的Json.format
宏爲 case class 提供隱式的Reads和Writes,
import models._
import play.api.libs.json.Format
package object models {
implicit val emailFormat = Json.format[Email]
implicit val personFormat = Json.format[Person]
...
implicit val addressFormat = Json.format[Address]
}
每當我們在models包創建一個新的 case class,就需要在這裏添加一個相應的隱式 Format 對象。並且被依賴的 case class 需要先定義,否則仍然會報編譯錯誤。編寫這些樣板代碼是很枯燥無味的,爲此我們在 Play Mongo 中實現了一個 implicit macro, 只需要一行代碼,便可以爲所有的 case class 生成隱式的Reads和Writes,
import scala.language.experimental.macros
import play.api.libs.json.Format
import cn.playscala.mongo.codecs.macrocodecs.JsonFormatMacro
package object models {
implicit def formats[T <: Product]: Format[T] = macro JsonFormatMacro.materializeJsonFormat[T]
}
需要注意的是,該隱式方法需要定義在 package object 下,例如當定義在 package object models
下時,該隱式方法將會對 models 包下所有的 case class 生效。
小夥伴們,趕緊打開build.sbt
,添加依賴嚐嚐鮮吧!
libraryDependencies += "cn.playscala" % "play-mongo_2.12" % "0.2.0"