Попытка написать средство форматирования json для этого класса case
case class OptionRange[+T](start: Option[T], end: Option[T])
Это то, что у меня есть до сих пор
implicit def fmt[T <: OptionRange[_]](implicit fmt: Format[Option[T]]): Format[OptionRange[T]] = new Format[OptionRange[T]] {
def reads(json: JsValue): JsSuccess[OptionRange[T]] = JsSuccess(new OptionRange[T] (
(json \ "start").as[Option[T]],
(json \ "end").as[Option[T]]
))
def writes(i: OptionRange[T]) = JsObject(Seq(
"start" -> Json.toJson(i.start),
"end" -> Json.toJson(i.end)
))
}
Этот фрагмент кода компилируется, но когда я пытаюсь отформатировать OptionRange[Int]
, я получаю сообщение об ошибке, что нет доступного неявного формата.
Как я могу написать формат, который будет доступен в неявной области видимости?
scala> Json.toJson(OptionRange(Some(1), Some(2))) <console>:22: error: No Json serializer found for type OptionRange[Int]. Try to implement an implicit Writes or Format for this type. Json.toJson(OptionRange(Some(1), Some(2)))
02.12.2016fmt
вручную, не оставляя его для неявного разрешения? 02.12.2016scala> import play.api.libs.json._
, см.import play.api.libs.json._
06.12.2016scala> case class OptionRange[+T](start: Option[T], end: Option[T])
, см.defined class OptionRange
06.12.2016implicit def fmt[T](implicit fmt: Format[Option[T]]): Format[OptionRange[T]] = new Format[OptionRange[T]] { def reads(json: JsValue): JsSuccess[OptionRange[T]] = JsSuccess(new OptionRange[T] ( (json \ "start").as[Option[T]], (json \ "end").as[Option[T]] )) def writes(i: OptionRange[T]) = JsObject(Seq( "start" -> Json.toJson(i.start), "end" -> Json.toJson(i.end) )) }
, см.error: missing or invalid dependency detected while loading class file 'Json.class'.
06.12.2016Json.class
изplay.api.libs.api.json
, я получаю еще одну ошибку и должен импортироватьWrites.class
. Затем при попытке определить мой форматтер я получаю сообщение об ошибке, говорящее о том, что файл классаReads.class
отсутствует. После импорта и попытки определить снова я получаю отсутствующую ошибкуJsResult.class
. После импорта я могу успешно определить свой форматтер. Однако попытка сделатьJson.toJson(OptionRange(Some(1), Some(2)))
по-прежнему приводит к той же ошибке вышеNo Json serializer found
06.12.2016Json.class
,Writes.class
,Reads.class
,JsResult.class
), каждый в пакете play.api.libs.json, но не импортированный с помощью первого оператора импортаimport play.api.libs.json._
07.12.2016