問題のあるコードは、多かれ少なかれ、そのように見えた:
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
をインポートするたびに、その書き込みは暗黙のスコープになります。
私にとっては、それは単に失敗しません。私はamm replを開き、 'load.ivy(" com.typesafe.play "%%" play "%" 2.5.0 ")'を介して依存関係を取得し、 '{" name ":" john " 、 "age":33} 'このエラーは、通常、 'class'が' caseクラス 'ではない場合に発生しますが、ここではすべて正常です。 –
うわー、私はアンモン人について知らなかった!それは素晴らしい、私は今これを試してみる –
はい、それは私のためにもamm replから動作します。 :O私は再びプロジェクト –