gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:38:49 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com