scala play json未找到unapply或unapplySeq函数

标签 scala playframework

Play 文档中的此JSON自动映射示例失败。为什么?
https://www.playframework.com/documentation/2.5.x/ScalaJsonAutomated

libraryDependencies += "com.typesafe.play" %% "play" % "2.5.0"
---
import play.api.libs.json._
case class Resident(name: String, age: Int, role: Option[String])
implicit val residentWrites = Json.writes[Resident]
println(Json.toJson(Resident("john", 33, None)))
---
Error: No unapply or unapplySeq function found
      implicit val residentWrites = Json.writes[Resident]

最佳答案

有问题的代码或多或少看起来像这样:

import play.api.libs.json._

object Test {
  def main(args: Array[String]): Unit = {
    case class Resident(name: String, age: Int, role: Option[String])
    implicit val residentWrites = Json.writes[Resident]
    println(Json.toJson(Resident("john", 33, None)))
  }
}

这里的问题是,该宏显然不适用于在方法内部定义的类。这并不是一个令人不安的限制,尽管我们宁愿不做这种事情。

要解决问题,可以将类def移到其他位置,例如对象级别
object Test {
  case class Resident(name: String, age: Int, role: Option[String])

  def main(args: Array[String]): Unit = {
    implicit val residentWrites = Json.writes[Resident]
    println(Json.toJson(Resident("john", 33, None)))
  }
}

或文件级别
case class Resident(name: String, age: Int, role: Option[String])

object Test {
  def main(args: Array[String]): Unit = {
    implicit val residentWrites = Json.writes[Resident]
    println(Json.toJson(Resident("john", 33, None)))
  }
}

我知道这只是为了测试目的,以查看最小的示例,但是我仍然会提到我们通常如何使用Writes定义类。
object Resident {
  implicit val residentWrites = Json.writes[Resident]
}

case class Resident(name: String, age: Int, role: Option[String])

这样,无论何时导入Resident,其写操作都将在隐式范围内。

关于scala play json未找到unapply或unapplySeq函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36926225/

相关文章:

java - Play Framework 部署失败

javascript - 如何将收到 PlayFramework View 的 Java 数组转换为 javascript?

scala - Akka Actors简单解释

scala - 在 Scala 中扩展匿名类型的目的是什么?

java - Play Framework 2 : Create images in public/images

java - 如何从 i18n 获取自定义消息到模型

java - 使用ebean通过play框架从mysql获取数据

scala - 在 Spark (HDFS) 中写入 CSV 文件时选择哪个选项?

java - 使用 el-get 安装 ensime 失败

Scala:折叠二维数组