使用Play 2.4 ScalaWS。我已经定义了一种方法,该方法采用类型清单T
并对外部API执行GET
请求。问题是它不会编译,因为没有用于解析JSON的隐式Reads
。
以下是代码:
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.]
我不确定最简单的方法。谢谢你的帮助。
我也试过(implicit m: Manifest[T], reads: Reads[T])
而没有运气。
答案 0 :(得分:3)
事实证明,使用(implicit m: Manifest[T], readsT: Reads[T])
并且Reads
是隐式参数是正确的方法。我必须运行sbt clean
,因为在增量编译器中有不正确的缓存。
现在效果很好。