我有一个case类,每个字段都是可选的,例如:
case class Foo(name: Option[String],
phone: Option[String],
email: Option[String])
Run Code Online (Sandbox Code Playgroud)
我试图为我的案例类创建手动解码器,发现解码器类似于:
implicit val decoder: Decoder[Foo] = (c: HCursor) => {
for {
name <- c.downField("name").as[String]
phone <- c.downField("phone").as[String]
email <- c.downField("email").as[String]
} yield {
new Foo(name, phone, email)
}
}
Run Code Online (Sandbox Code Playgroud)
但检查downField方法是,如果未设置该字段,则光标将移至FailedCursor,因此会出现错误。
我如何期望某个字段为可选字段,None如果未定义则返回?
只需使用c.downField.as[Option[T]],那么您的代码将如下所示:
implicit val decoder: Decoder[Foo] = (c: HCursor) => {
for {
name <- c.downField("name").as[Option[String]]
phone <- c.downField("phone").as[Option[String]]
email <- c.downField("email").as[Option[String]]
} yield new Foo(name, phone, email)
}
Run Code Online (Sandbox Code Playgroud)