所以我的项目有两个类

case class Item(id: Int, name: String)


case class Order(id: Int, items: List[Item])

我正在尝试对Order进行读写属性,但出现编译器错误,提示:

“未找到unapply或unapplySeq函数”

在我的 Controller 中,我有以下内容:
implicit val itemReads = Json.reads[Item]
implicit val itemWrites = Json.writes[Item]
implicit val listItemReads = Json.reads[List[Item]]
implicit val listItemWrites = Json.writes[List[Item]]

该代码适用于itemReadsitemWrites,但不适用于底部的两个。谁能告诉我我要去哪里错了,我是Play框架的新手。

感谢您的时间。

最佳答案

No unapply or unapplySeq function found”错误是由以下两个原因引起的:

implicit val listItemReads = Json.reads[List[Item]]
implicit val listItemWrites = Json.writes[List[Item]]

只是把它们扔掉。 As Ende said,Play知道如何处理列表。

但是您也需要ReadsWrites作为Order!并且由于您同时进行读写操作,因此最简单的方法是定义 Format ,即ReadsWrites特性的混合体。这应该工作:
case class Item(id: Int, name: String)

object Item {
  implicit val format = Json.format[Item]
}

case class Order(id: Int, items: List[Item])

object Order {
  implicit val format = Json.format[Order]
}

上面的ordering is significant; Item和伴随对象必须在Order之前。

因此,一旦有了所有需要的隐式转换器,关键就是使它们在 Controller 中正确可见。上面是一种解决方案,但是还有其他方法,正如我在trying to do something similar之后了解到的那样。

关于json - 在Scala Play中进行读写以获取自定义类的列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34437520/

10-13 07:28