我只花了几个小时探索 Play Framework (2.5.1)
,我很困惑为什么在您已经定义了 Format
和 Reads
的情况下还要创建 Writes
。通过为您的类定义 Reads
和 Writes
,您是否定义了将类与 JsValue
相互转换所需的所有功能?
最佳答案
如 play-framework 文档中提到的 here
格式是 Reads[T] 和 Writes[T] 的组合。因此,您可以为类型 T 定义单个隐式 Format[T] 并使用它来读取和写入 Json,而不是为类型 T 定义单独的隐式 Reads[T] 和 Writes[T]。因此,如果您已经有了 Reads[T]和 Writes[T] 为您的类型 T 定义然后 Format[T] 不是必需的,反之亦然。
Format 的一个优点是您可以为您的类型 T 定义一个隐式格式[T],而不是定义两个单独的 Reads[T] 和 Writes[T],如果它们都是对称的(即读取和写入)。因此 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/