Не уверен, как десериализовать и сериализовать тип, который может измениться - PullRequest
0 голосов
/ 05 ноября 2019

Скажем, у меня есть такая модель:

case class Items(typeOfItems: TypeOfItems)

object Items{
  implicit val format = Json.format[Items]
}


sealed trait TypeOfItems extends Product with Serializable

object TypeOfItems {

  final case class Toy(typeOfItem : String, name : String, price : Int) extends TypeOfItems

  final case class Car(typeOfItem : String, model: String, price : Int ) extends TypeOfItems

}

Я не могу выполнять сериализацию или десериализацию. Я получаю следующие ошибки:

 No instance of play.api.libs.json.Format is available for model.TypeOfItems in the implicit scope (Hint: if declared in the same file, make sure it's declared before)
[error]   implicit val format = Json.format[Items]
[error]                                    ^
[error]  No Json serializer found for type model.Items. Try to implement an implicit Writes or Format for this type.
[error]     Ok(Json.toJson(Items(Toy("Toy", "Doll", 2))))

Я не уверен, как указать форматы для TypeOfItems. Как мне это сделать?

1 Ответ

0 голосов
/ 05 ноября 2019

In Play 2.7 sealed traits поддерживаются в play-json.

Как уже упоминалось в комментариях, все, что вам не хватает, это:

object TypeOfItems{
  implicit val format = Json.format[TypeOfItems]
}

Смотрите здесьтребования в документации: ScalaJsonAutomated

Для Play 2.6 см. этот ответ: Свободный от шума формат JSON для запечатанных черт с библиотекой Play 2.2 (как следует из названия, естьтакже решения для более старых версий)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...