有没有办法根据不同的字段读取字段?
这是案例类:
case class Person(children: List[String], hasChildren: Boolean)
我想根据子列表填写hasChildren。
所以我尝试了以下内容:
implicit val personReads: Reads[Person] = (
(JsPath \ "children").readNullable[List[String]].map(_.getOrElse(List())) and
(JsPath \ "hasChildren").read[Boolean](
(JsPath \ "children").readNullable[List[String]].map{
case Some(opt) => opt.nonEmpty
case None => false
}))
但是虽然我提供的孩子与无案例匹配,但返回false。
我做错了什么?有可能吗?
答案 0 :(得分:1)
当然有可能。您正在考虑正确的方向(使用(
(__ \ "children").readNullable[List[String]].map(_.getOrElse(List())) and
(__ \ "children").readNullable[List[String]].map(_.exists(_.nonEmpty))
)(Person.apply _)
)。您的读者必须
readNullable[T]
您必须实现具有属性顺序和类型的阅读器,例如您的案例类。路径中使用的属性名称并不重要。
重要提示: {{1}}在JsPath搜索可选字段或可空字段(未找到字段或null为无)。