scala play json не найдена функция unapply или unapplySeq
этот пример автоматического сопоставления 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]
1 ответов
проблемный код выглядел более или менее так:
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
, его записи будут находиться в неявной области.