玩! 2.4 - 具有通用类型的ScalaJson的隐式读取

时间:2015-11-06 05:33:02

标签: scala playframework playframework-2.4

使用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])而没有运气。

1 个答案:

答案 0 :(得分:3)

事实证明,使用(implicit m: Manifest[T], readsT: Reads[T])并且Reads是隐式参数是正确的方法。我必须运行sbt clean,因为在增量编译器中有不正确的缓存。

现在效果很好。