2
votes

Trying to convert class to Json. Here is my class, it includes other two classes:

case class GoodEdit(good: Good, data: List[(String, Option[GoodText])])
case class Good(
  id: Long,
  partnumber: Option[String] = None
)
case class GoodText(
  goodid: Long,
  languageid: Long,
  title: String,
  description: Option[String] = None)

And here are my writers:

object GoodWriters {
  implicit val goodWrites = new Writes[Good] {
    def writes(good: Good) = Json.obj(
      "id" -> good.id,
      "partnumber" -> good.partnumber
    )
  }

  implicit val goodTextWrites = new Writes[GoodText] {
    def writes(goodText: GoodText) = Json.obj(
      "goodid" -> goodText.goodid,
      "languageid" -> goodText.languageid,
      "title" -> goodText.title,
      "description" -> goodText.description
    )
  }

  implicit val GoodEditWrites = new Writes[GoodEdit] {
    def writes(goodEdit: GoodEdit) = Json.obj(
      "good" -> Json.toJson(goodEdit.good),
      "data" -> Json.toJson(
        for ((lang, goodTextOpt) <- goodEdit.data ) yield Json.obj(lang -> goodTextOpt)
      )
    )
  }

Then, in controller I try it to use like this:

  Action {
    import jwriters.GoodWriters._
    GoodEditAggregate.get(id).map{
      a => Ok(Json.toJson(a))
    }.getOrElse(Ok(Json.toJson(Json.obj("status" -> "error","message" -> "Can't find good with this id"))))
  }

And compilator complaining on this part: Ok(Json.toJson(a))

No Json serializer found for type GoodEdit. Try to implement an implicit Writes or Format for this type

Can't understand what is wrong. I've imported writers for objects already

1
Do you have another Writes implementations imported\defined in the same context? It could be ambiguous implicits - Odomontois
Thanks, seems you were right - sergeda

1 Answers

0
votes

Try to Import Goodwrites globally