我有以下课程
case class PaginatedSearchResult[T : RootJsonFormat](pages: Option[Page], objects: Option[Seq[T]])
object PaginatedSearchResult extends DefaultJsonProtocol {
implicit val format = jsonFormat2(PaginatedSearchResult.apply)
}
我正试图将其解组:
Unmarshal(response.entity).to[PaginatedSearchResult[T]]
这是我得到的错误
Error:(15, 59) could not find implicit value for evidence parameter of type spray.json.RootJsonFormat[T]
implicit val format = jsonFormat2(PaginatedSearchResult.apply)
我正在尝试弄清楚如何正确地将其解组。任何帮助将不胜感激,谢谢。
答案 0 :(得分:2)
有两个问题:
定义jsonFormat2(PaginatedSearchResult.apply)
时,您会缺少类型RootJsonFormat[T]
的隐式值,这是构造函数/应用方法中所必需的。编译器无法为任何T
知道它,并且给您错误
Error:(15, 59) could not find implicit value for evidence parameter of type spray.json.RootJsonFormat[T]
您可以通过将格式定义为def
implicit def format[T: RootJsonFormat] = jsonFormat2(PaginatedSearchResult.apply)
第二个问题是您需要使用格式的地方
Unmarshal(response.entity).to[PaginatedSearchResult[T]]
在这种情况下,您必须使用具体的T
或在隐式范围内使用RootJsonFormat[T]
。
您可以这样做
def unmarshal[T: RootJsonFormat] = {
Unmarshal(response.entity).to[PaginatedSearchResult[T]]
}
例如,如果您有类型unmarshal[User]
,请将其用作User
。
答案 1 :(得分:0)
我设法用以下代码解决了这个问题:
if(!isLocalPlayer)