作为免责声明:我对Scala和函数式编程非常陌生。
我有以下课程:
case class A(
field1: String,
field2: DateTime
)
case class B(
listOfStuff: Seq[A]
)
object A{
def create(field1: String, field2: DateTime): A = A(field1, field2)
}
object B{
def create(listOfStuff: Seq[A]): B = B(listOfStuff)
}
(存在create()
函数,因为我在使用apply()
时有时会在代码中出现问题。让我们忽略这一点,我怀疑它是否相关。)
我以JSON格式获取这些对象,并尝试使用Play-JSON库解析它们。一个重要的方面是JSON文本中可能缺少列表(Seq
),它是一个可选字段。
考虑到这一点,这就是我写这个特定行的方式:
private implicit val messageReader = (
//...
(__ \ "stuff").readNullable[Seq[A]].map(_.getOrElse(Seq()))
//...
)(B.create _)
编译时,我收到以下错误:
错误:(!line!,!column!)找不到类型Seq [A]的Json反序列化器。 尝试为此类型实现隐式读取或格式。
从我在this question中看到的情况来看,显然你需要implicit
个Reads[T]
个T
个实例Reads[T]
为每种类型private implicit val messageReader = (
(__ \ "stuff").readNullable[Seq[A]].map(_.getOrElse(Seq()))
)(B.create _)
private implicit val anotherReader = (
(__ \ "field1").read[String] and
(__ \ "field2").read[String].map(org.joda.time.DateTime.parse)
)(A.create _)
而不是语言的一部分(或者某种东西)那样的,我是否提到了我对此的陌生?)
所以我在同一范围内添加了辅助ngOnInit()
,我的代码现在看起来像这样:
{{1}}
但是我仍然在同一行上得到同样的错误。
我觉得这里有一些非常容易和明显的问题,但我无法弄清楚它是什么。
我该如何解决这个问题?
答案 0 :(得分:0)
如果if
接受单个参数,则其读取内容如下:
B.create