Перегруженное значение метода применяется к альтернативам с необязательным классом типа - PullRequest
0 голосов
/ 07 мая 2019

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

В сообщении об ошибке говорится, что "перегруженное значение метода применимо с альтернативами".

Вот код чтения:


import play.api.libs.json._
import play.api.libs.functional.syntax._


implicit val accountCreatedReads: Reads[AccountCreated] = (
      (JsPath \ "eventId").read[String] and
      (JsPath \ "timestamp").read[OffsetDateTime] and
      (JsPath \ "accountId").read[String] and
      (JsPath \ "accountAttributes").readNullable[Attributes] and
      (JsPath \ "expirationTime").readNullable[Long]
  )(AccountCreated.apply _)

А вот и класс случая:

case class AccountCreated(
  eventId: String,
  timestamp: OffsetDateTime,
  accountId: String,
  accountAttributes: Option[Attributes] = None,  // This is the line the error refers to
  expirationTime: Option[Long] = None
)

Вот класс, представляющий атрибуты:

type Attributes = JsValue

Может кто-нибудь помочь мне здесь?Я впервые использую эту часть play-json, поэтому мне интересно, что я делаю не так.

1 Ответ

1 голос
/ 07 мая 2019

Итак, вы хотите прочитать Атрибуты как Json.

 implicit val accountCreatedReads: Reads[AccountCreated] = (
      (JsPath \ "eventId").read[String] and
      (JsPath \ "timestamp").read[OffsetDateTime] and
      (JsPath \ "accountId").read[String] and
      (JsPath \ "accountAttributes").readNullable[String].map(Json.parse(_)) and //returns JsValue
      (JsPath \ "expirationTime").readNullable[Long]
  )(AccountCreated.apply _)

Если это действительно JSON, тогда

(JsPath \ "accountAttributes").readNullable[String].map(Json.parse(_))

сможет проанализировать его без проблем.

...