使用 Play Mongo 簡化 Play Json 開發 頂 原

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"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章