在Play框架Web服务参数中有一个List

时间:2016-03-05 13:41:15

标签: scala playframework

我已经在play框架中编写了这个Web服务。

控制器

  def getByGenre(genre: String) = Action {
    val result = Await.result(Movies.getByGenre(genre), 5 seconds)
    Ok(toJson(result))
  }

路由

GET     /movies/genre/:genre              controllers.MoviesController.getByGenre(genre: String)

然而,用户可以选择多个类型。因此,我需要将genre参数转换为List [String]

我还需要知道如何使用CURL将该Array参数传递给Web服务。

1 个答案:

答案 0 :(得分:2)

如果您可以将genres参数作为查询字符串的一部分传递,只需使用不同的值重复该参数,然后像这样检索它:

def getByGenre() = Action.async { implicit request =>
    val genres = request.queryString.get("genres")
    Movies.getByGenre(genres).map { movies =>
      Ok(toJson(movies))
    }
}

您的路线将是:

GET    /movies/genre          controllers.MoviesController.getByGenre()

另请注意,您需要将Movies.getByGenre签名更改为:

def getByGenre(genres: Option[Seq[String]]): Seq[Movies]

最终的网址会像@mfirry所示:

myhost.com/movies/genre?genre=action&genre=drama

最后,正如您可能已经注意到的那样,我已从您的操作中移除了阻止代码。在控制器上使用Await意味着在最坏的情况下,您的操作将至少阻塞5秒。我建议你看一下Play文档的以下页面:

https://www.playframework.com/documentation/2.5.x/ScalaAsync