如何从play2 mini中的Path参数中提取值?

时间:2012-07-13 10:45:23

标签: scala playframework play2-mini

我将使用的方法是DELETE请求,我有这个用于Web服务调用的URL:

http://www.localhost:9000/example/com/foo/bar

我想提取/ foo和/ bar并将其存储在变量中。

有人知道怎么做吗?谢谢!

我正在使用play2-mini进行网络服务,并为scala发送http请求。

2 个答案:

答案 0 :(得分:2)

Play有一种非常复杂的传递参数的方式,即通过路由定义。在您的conf / Routes文件中定义一个类似

的路径
GET  /example/com/:foo  controllers.yourcontroller.deleteAction(foo: String)

何时进入

http://www.localhost:9000/example/com/user

在您的浏览器中,将调用Controller定义的deleteAction,并在其参数foo中将字符串“user”传递给它。在那里你可以操纵它。 请注意,冒号后跟冒号的部分是动态的。它将接受任何满足字符串要求的内容,并将其存储到delete foo变量中。

答案 1 :(得分:0)

您可以使用regexp,如以下代码所示:

object App extends Application { 
  def route = Routes(
    Through("/people/(.*)".r) {groups: List[String] =>
      Action{ 
        val id :: Nil = groups
        Ok(<h1>It works with regex!, id: {id}</h1>).as("text/html") 
      }
    }, 
    {
      case GET(Path("/coco")) & QueryString(qs) => Action{ request =>
        println(request.body)
        println(play.api.Play.current)
        val result = QueryString(qs,"foo").getOrElse("noh")
        Ok(<h1>It works!, query String {result}</h1>).as("text/html") }

      case GET(Path("/cocoa")) => Action{ request =>
        Ok(<h1>It works with extractors!</h1>).as("text/html") }
      },
    Through("/flowers/id/") {groups: List[String] =>
      Action{ 
        val id :: Nil = groups
        Ok(<h1>It works with simple startsWith! -  id: {id}</h1>).as("text/html") 
      }
    }
  )
}