を私はJSONにケースクラスを変換する関数を記述したいと思います:Scalaは再生:「JSON書き込み可能なクラス」を定義する方法
import play.api.libs.json._
def myJson(cc: Product): JsValue = {
Json.toJson(cc) // simplified
}
各ケースクラスは、例えば、暗黙のWrites[T]
があります
case class Test(a: Int)
object Test {
implicit val jsonWrites: Writes[Test] = Json.writes[Test]
}
Json.toJson(new Test(1))
を個別に書き込むことはできますが、cc
に暗黙的な書き込みが定義されているかどうかわからないため、上記の関数myJson
はコンパイルされません。
[それは暗黙のWrites
を持つクラスのみをとるようにどのように私は、関数のシグネチャを書き込むことができますか?]
編集:それだけで暗黙のWrites
を持つクラスに対応するように、どのように機能入力タイプを書き込むことができますか?
trait JsonWritableResult[T <: Product] {
implicit val jsonWrites: Writes[T]
}
case class Test(a: Int)
object Test extends JsonWritableResult[Test] {
implicit val jsonWrites: Writes[Test] = Json.writes[Test]
}
def myJson(cc: JsonWritableResult[_ <: Product]): JsValue = {
Json.toJson(cc)
}
しかし、それは言う"タイプmodels.JsonWritableResult [_ $ 2]が見つかりませんJSONシリアライザ":
は、私はこれを試してみました。
あなたは、任意のケースクラスのカスタムmyJson機能をしたいですかなぜ? Json.toJsonとはどう違うのですか? – Tyth
私は120のそのようなケースクラスを持っているだけなので、私は多くの異なるJson結果を返すために120個のコントローラを書いたくありません。一般的な関数が最適です。 – JulienD
@Tyth実際は暗いかもしれませんが、まだ実現していないことに注意してください) – JulienD