json - 重载方法值 [read] 不能应用于 (String => SearchController.this.TrackSearch)

标签 json scala playframework

我正在使用 ws 查询 spotify api 以获取给定查询的轨道列表,当我将 JSON 数据转换为案例类时,我遇到了一个错误还没有弄清楚...

class SearchController @Inject() (
  val ws: WSClient
    ) extends Controller {

  case class TrackSearch(href: String)

  implicit val trackResultsReads: Reads[TrackSearch] = (
      (__ \ "tracks" \ "href").read[String]
    )(TrackSearch.apply _)

  def index = Action.async { implicit request =>
    search("track", param(request, "q")).map { r =>
       val ts = r.json.as[TrackSearch]
       println(ts)
       Ok
    }
  }

  private def search(category: String, query: String): Future[Try[WSResponse]] = {
    ws.url("https://api.spotify.com/v1/search")
      .withQueryString("q" -> query, "type" -> category)
      .get()
      .map(Success(_))
      .recover { case x => Failure(x) }
  }

  private def param(request: Request[AnyContent], name: String): String = {
    request.queryString.get(name).flatMap(_.headOption).getOrElse("")
  }
}

我得到的错误是:

Overloaded method value [read] cannot be applied to  (String => SearchController.this.TrackSearch)

  implicit val trackResultsReads: Reads[TrackSearch] 
>    (__ \ "tracks" \ "href").read[String]
  )(TrackSearch.apply _)

如果我在我的操作中查询 JSPath,我可以很好地返回“href”字符串,所以不是这样的:

println(r._2.json \ "tracks" \ "href")

最佳答案

问题是只有一个字段。如果您添加第二个字段,它将编译。我不完全理解为什么它不应该用单个字段编译。因此,在单字段情况下,请尝试以下操作:

implicit val trackResultsReads: Reads[TrackSearch] = {
  ((__ \ "tracks" \ "href").read[String])
    .map(TrackSearch(_))
}

Here是我在上面找到的一个很旧的链接。另见 this link对于具有不同方法的类似 SO 问题。

关于json - 重载方法值 [read] 不能应用于 (String => SearchController.this.TrackSearch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40679540/

相关文章:

javascript - react : Iterating through deeply nested objects and displaying them without tearing my hair out

java - 如何使用 Gson API 提取复杂嵌套 json 结构的特定键值对

scala - 如何在 Play 中发送多部分/相关请求

scala - Futures 总是最终不返回任何东西吗?

java - 如何在 play framework 1.2.x 中获取当前 ssl 客户端 X509 证书

c# - 如何删除复杂 json 对象中的空字符串 json 值?

Python 创建 Google 存储桶

scala - 从 map 数组的 RDD 中获取最大的 map

scala - 如何对我的Play Scala应用进行docker化?

scala - Play Framework 和 sbt : passing credentials to a nexus passowrd protected repo