玩2.4-带泛型类型的ScalaJson的隐式读取
使用Play 2.4 ScalaWS。我定义了一个方法,该方法接受类型manifest T并执行对外部API的GET请求。问题是它不会编译,因为没有用于解析JSON的隐式读取 代码如下:玩2.4-带泛型类型的ScalaJson的隐式读取,scala,playframework,playframework-2.4,Scala,Playframework,Playframework 2.4,使用Play 2.4 ScalaWS。我定义了一个方法,该方法接受类型manifest T并执行对外部API的GET请求。问题是它不会编译,因为没有用于解析JSON的隐式读取 代码如下: def myGet[T](path: String)(implicit m: Manifest[T]): Future[Either[model.MyError,T]] = { val url = MY_HOST+"/"+path ws .url(url)
def myGet[T](path: String)(implicit m: Manifest[T]): Future[Either[model.MyError,T]] = {
val url = MY_HOST+"/"+path
ws
.url(url)
.withHeaders(myHeaders: _*)
.get()
.map { response =>
try {
Right(response.json.as[T])
} catch {
// check if this response was an error
Left(response.json.as[model.MyError])
}
}
}
编译错误具体是:
Compilation error[No Json deserializer found for type T. Try to implement an implicit Reads or Format for this type.]
我不知道最简单的方法是什么。谢谢你的帮助
编辑
我还尝试了隐式m:Manifest[T],reads:reads[T],但没有成功。结果表明,使用隐式m:Manifest[T],readsT:reads[T]并将读取作为隐式参数是正确的方法。我必须运行sbt clean,因为增量编译器中的缓存不正确
它现在工作正常。似乎不需要清单[T],尽管很难从上下文中分辨出来。只是一个想法。以下是我如何以过于简单的形式使用它:def fetchProfile=myGet[UserProfile]/user