[英]Circe : Serialize case class body fields to JSON
我有一个带val
的case类(这不是构造函数参数)。 如何在生成的json中获取这些字段?
我用Json4s
前,并用FieldSerializer
它做这一招。 但是无法用Circe做到这一点。
我想要的是在特征中定义所有必填字段,有时,该字段可能是case类的一部分。 但是在某些情况下,将它们保留为case类的一部分是没有意义的,但仍需要在json中使用。 请注意下面的EntityWithBodyParams
和AnotherEntity
之间的区别。
这是我的案例案例类。
trait NamedEntity {
def name:String
}
case class EntityWithBodyParams(id:Long) extends NamedEntity {
override val name:String = "Name"
}
case class AnotherEntity(id:Long, name:String) extends NamedEntity
asJson之后的回应
{
"id" : 100
}
但是我的期望是:
{
"id" : 100,
"name":"Name"
}
您可以创建自己的Encoder
。
import io.circe.{Encoder, Json}
case class EntityWithBodyParams(id: Long) {
val name: String = "Name"
}
implicit val encoder: Encoder[EntityWithBodyParams] = new
Encoder[EntityWithBodyParams] {
override def apply(entity: EntityWithBodyParams): Json = Json.obj(
"id" -> Json.fromLong(entity.id),
"name" -> Json.fromString(entity.name)
)
}
出现这种情况的原因是,circ自动编码器仅使用案例类的product
字段。 您可以在这里找到更多信息https://github.com/milessabin/shapeless
尝试像这样编写案例类。
case class EntityWithBodyParams(id:Long, val name:String = "Name")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.