当前位置:  开发笔记 > 编程语言 > 正文

在Scala中进行读取和写入以获取自定义类的列表

如何解决《在Scala中进行读取和写入以获取自定义类的列表》经验,为你挑选了2个好方法。

所以我的项目中有两个课程

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

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

我正在尝试为Order创建读写属性,但是我收到编译器错误说:

"找不到unapply或unapplySeq函数"

在我的控制器中,我有以下内容:

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框架的新手.

感谢您的时间.



1> Jonik..:

" No unapply or unapplySeq function found"错误是由这两个引起的:

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

把它们扔掉 正如Ende所说,Play知道如何处理列表.

但是,你需要ReadsWritesOrder呢!既然你同时阅读和写作,最简单的方法是定义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]
}

以上,排序很重要 ; Item并且伴侣对象必须在之前Order.

因此,一旦您拥有所需的所有隐式转换器,关键是使它们在控制器中正确可见.以上是一个解决方案,但还有其他方法,正如我在尝试做类似的事情后所学到的.



2> Ende Neu..:

你实际上并不需要定义那两个含义,play已经知道如何处理列表:

scala> import play.api.libs.json._ 
import play.api.libs.json._

scala>   case class Item(id: Int, name: String)
defined class Item

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

scala>   implicit val itemReads = Json.reads[Item]
itemReads: play.api.libs.json.Reads[Item] = play.api.libs.json.Reads$$anon$8@478fdbc9

scala>   implicit val itemWrites = Json.writes[Item]
itemWrites: play.api.libs.json.OWrites[Item] = play.api.libs.json.OWrites$$anon$2@26de09b8

scala>   Json.toJson(List(Item(1, ""), Item(2, "")))
res0: play.api.libs.json.JsValue = [{"id":1,"name":""},{"id":2,"name":""}]

scala>   Json.toJson(Order(10, List(Item(1, ""), Item(2, ""))))
res1: play.api.libs.json.JsValue = {"id":10,"items":[{"id":1,"name":""},{"id":2,"name":""}]}

您看到的错误可能是因为Play使用unapply方法为您的读/写构造宏扩展,并且List是一个抽象类,play-json需要具体类型才能使宏工作.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有