我们有一个“枚举”,例如:
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
}
})
这似乎按预期方式工作。 这是推荐的方式或者是有一个更好的?