我只有几个小时才能探索 Play Framework (2.5.1)
我很困惑你为什么要创建 Format
当你已经定义了Reads
和 Writes
.通过定义 Reads
和 Writes
对于您的类(class),您是否没有定义将类(class)与JsValue
相互转换所需的所有功能? ?
最佳答案
正如 play-framework 文档中提到的 here
Format[T] is just a mix of the Reads and Writes traits and can be used for implicit conversion in place of its components.
Format 是 Reads[T] 和 Writes[T] 的组合。因此,您可以为类型 T 定义一个隐式 Format[T] 并使用它来读取和写入 Json,而不是为类型 T 定义单独的隐式 Reads[T] 和 Writes[T]。因此,如果您已经有 Reads[T]并为您的类型 T 定义 Writes[T],然后不需要 Format[T],反之亦然。
Format 的一个优点是您可以为您的类型 T 定义一个 Implicit Format[T],而不是定义两个单独的 Reads[T] 和 Writes[T],如果它们都是对称的(即 Reads 和 Writes)。因此 Format 使您的 JSON Structure 定义的重复性降低。例如你可以做这样的事情
implicit val formater: Format[Data] = (
(__ \ "id").format[Int] and
(__ \ "name").format[String] and
(__ \ "value").format[String]
) (Data.apply, unlift(Data.unapply))
而不是这个。
implicit val dataWriter: Writes[Data] = (
(__ \ "id").write[Int] and
(__ \ "name").write[String] and
(__ \ "file_type").write[String]
) (Data.apply)
implicit val dataWriter: Reads[Data] = (
(__ \ "id").read[Int] and
(__ \ "name").read[String] and
(__ \ "file_type").read[String]
) (unlift(Data.unapply))
关于json - 如果您有 Reads[T] 和 Writes [T],那么 Format[T] 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44402640/