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