[英]Is that possible to make semiauto decoders consider default values for case class fields?
Is that possible to make semiauto decoders consider default values for case class fields? 是否可以使半自动解码器考虑案例类字段的默认值?
The following code will fail with: 以下代码将失败并显示:
Left(DecodingFailure(Attempt to decode value on failed cursor, List(DownField(isActive))))
I thought circe would consider the default value for the case class field isActive
我认为马戏团会考虑案例类字段的默认值为isActive
case class Person(
id: Option[Int] = None,
name: String,
isActive: Boolean = true
)
implicit val personJsonDecoder: Decoder[Person] = deriveDecoder
val rawJson = """
{
"name": "Geovanny Junio"
}
"""
val r = for {
j <- parse(rawJson)
p <- j.as[Person]
} yield p
println(r)
Yes, but you'll need circe-generic-extras: 是的,但是您需要circe-generic-extras:
import io.circe.Decoder
import io.circe.generic.extras.Configuration
import io.circe.generic.extras.semiauto.deriveDecoder
case class Person(
id: Option[Int] = None,
name: String,
isActive: Boolean = true
)
object Person {
implicit val personConfig: Configuration =
Configuration.default.withDefaults
implicit val personJsonDecoder: Decoder[Person] = deriveDecoder
}
And then: 接着:
scala> io.circe.jawn.decode[Person]("""{"name": "Geovanny Junio"}""")
res0: Either[io.circe.Error,Person] = Right(Person(None,Geovanny Junio,true))
I've been intending to add this functionality to circe-derivation, but haven't had time, so circe-generic-extras is the only way to make it work for now (short of writing your own decoder). 我一直打算将此功能添加到circe-derivation中,但还没有时间,因此circe-generic-extras是目前使其工作的唯一方法(缺少编写自己的解码器的功能)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.