我只花了几个小时探索 Play Framework (2.5.1) ,我很困惑为什么在您已经定义了 FormatReads 的情况下还要创建 Writes 。通过为您的类定义 ReadsWrites ,您是否定义了将类与 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/

10-11 03:55