所以我的项目有两个类
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]]
该代码适用于
itemReads
和itemWrites
,但不适用于底部的两个。谁能告诉我我要去哪里错了,我是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知道如何处理列表。
但是您也需要
Reads
和Writes
作为Order
!并且由于您同时进行读写操作,因此最简单的方法是定义 Format
,即Reads
和Writes
特性的混合体。这应该工作: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/