У нас есть "перечисление", например:
sealed abstract class StatusEnumeration(val value: String)
case object Status {
case object Mine extends StatusEnumeration("mine")
case object Someone extends StatusEnumeration("someone")
case object Neighbor extends StatusEnumeration("neighbor")
case object Unknown extends StatusEnumeration("unknown")
}
Эта структура продиктована нашим доменом / потребностями. Однако я хотел бы преобразовать этот StatusEnumeration
в выходной JSON, например, так:
case class Root(status: StatusEnumeration)
Я установил следующий неявный кодер, и он работает как положено:
implicit val encoder = deriveEnumerationEncoder[StatusEnumeration]
Однако, , если , StatusEnumeration
установлен на Status.Unknown
Я бы хотел пропустить генерацию значения Или просто вывести null
вместо этого (который я затем могу отбросить с помощью dropNullValues
). Как я могу сделать что-то подобное? Это вообще возможно или мне нужно переопределить другой набор перечислений?
Пока это то, что я пытался, когда @Alec также прокомментировал попробовать что-то подобное:
implicit val encoder = deriveEnumerationEncoder[StatusEnumeration].mapJson(x=>{
x.asString match {
case Some("Unknown") => Json.Null
case Some(s) => Json.fromString(s.toLowerCase) // output expect lowercase - not sure if the consumer is case-sensitive
case None => Json.Null
}
})
Это, кажется, работает как ожидалось. Это рекомендуемый способ или есть лучший?