JsonValidationError (List (error.expected.jsobject) при анализе объекта - PullRequest
0 голосов

Я проанализировал объект до Json в моем методе записи, но получил ошибку JsonValidationError (List (error.expected.jsobject)

override def writes(o: UploadedFile): JsValue = JsObject(
  Seq("path" -> JsString(o.path.toString), "content" -> JsString(Json.stringify(Json.toJson(o.content))))
)

UploadedFile.fileContent - это объект как UploadedFile и имеет свой собственный неявный форматер

final case class UploadedFileContent(content: String)

object UploadedFileContent {
  implicit val uploadedFileContentFormat: OFormat[UploadedFileContent] = Json.format[UploadedFileContent]
}

и модуль форматирования UploadedFile:

object UploadedFile {

  implicit object UploadedFileFormat extends Format[UploadedFile] {
    override def reads(json: JsValue): JsResult[UploadedFile] =
      JsSuccess(
        UploadedFile(Paths.get((json \ "path").as[String]), (json \ "content").as[UploadedFileContent])
      )

    override def writes(o: UploadedFile): JsValue = JsObject(
      Seq("path" -> JsString(o.path.toString), "content" -> JsString(Json.stringify(Json.toJson(o.content))))//error is smw here
    )
  }
}

Может мне что-то нужно вместо Json .stringify (Json .to Json (o.content)) в моем методе записи, но я не знаю, что именно. Пробовал много вариантов

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Если UploadedFile - класс случая:

implicit val format: OFormat[UploadedFile] = Json.format
0 голосов
  implicit lazy val UploadedFileFormat: OFormat[UploadedFile] = {
    ((JsPath \ "path").format[Path] ~ (JsPath \ "content")
      .format[UploadedFileContent])(UploadedFile.apply, unlift(UploadedFile.unapply))
  }
...