类似以下这样的代码应该可以正常工作:
GET /foo controllers.MyController.foo(name: String ?= "", age: Int ?= 0)
由于参数可以省略,您需要为它们提供默认值(并在控制器函数中处理这些值)。
如果传入一个隐式请求并访问getQueryString参数(在Play 2.1.0中添加),则应该能够在控制器中访问其他可选参数:
def foo(name: String, age: Integer) = Action { implicit request =>
val authCode: Option[String] = request.getQueryString("authCode")
...
}
更好的做法可能只是将可选的名称和年龄从控制器参数中删除,并从查询字符串中提取所有内容:
def foo = Action { implicit request =>
val nameOpt: Option[String] = request.getQueryString("name")
val ageOpt: Option[String] = request.getQueryString("age")
...
}
更新:2.1.1版本的当前文档有些错误(已通过问题#776进行修复),但这是另一种(也是我认为最好的)选择:
GET /foo controllers.MyController.foo(name: Option[String], age: Option[Int])
And...
def foo(name: Option[String], age: Option[Int]) = Action { implicit request =>
Ok(s"Name is: $name, age is $age")
}