1

我正在尝试执行以下操作(我使用 spray-json_2.9.2 v1.2.3,因为我使用 scala 2.9.2)

import spray.json._
import spray.json.DefaultJsonProtocol
import DefaultJsonProtocol._

case class TestMe(key: String, value: String)
object MyJsonProtocol extends DefaultJsonProtocol {
  implicit val prot = jsonFormat4(TestMe)
}

但我得到编译错误:

TestMe.type(带有基础类型对象 com...TestMe)[INFO] 需要:(?,?,?,?)=>?[INFO] 注意:隐式值 prot 在这里不适用,因为它位于应用程序点之后,并且缺少显式结果类型 [INFO]implicit val prot = jsonFormat4(TestMe)

我在做什么错我只是关注文档:https ://github.com/spray/spray-json#providing-jsonformats-for-case-classes

谢谢

4

1 回答 1

9

如果您查看所有jsonFormat签名,您会发现它需要一个函数,更准确地说apply

case class TestMe(key: String, value: String)
object MyJsonProtocol extends DefaultJsonProtocol {
  implicit val prot = jsonFormat2(TestMe.apply)
}

AND jsonFormat不是宏函数,只是重载了,所以最后的数字应该等于case类中的args个数

在这个例子中,你的案例类有两个参数,所以你需要jsonFormat2而不是jsonFormat4

并且最好将伴随对象重命名MyJsonProtocolTestMe,这将减少隐式的显式导入

于 2013-10-23T09:14:02.813 回答