假设我在Scala中有一个已经可以正常运行的基于Play 2.0框架的应用程序,它提供如下URL:
http://localhost:9000/birthdays
,它返回所有已知生日的列表。
现在我想通过添加使用可选的"from“(date)和" to”请求参数来限制结果的功能来增强这一点。
http://localhost:9000/birthdays?from=20120131&to=20120229
(日期在此处解释为yyyyMMdd)
我的问题是,在使用Scala的Play 2.0中,如何处理请求参数绑定和解释,特别是考虑到这两个参数都应该是可选的。
这些参数应该以某种方式在"routes“规范中表达吗?或者,响应控制器方法是否应该以某种方式将参数从请求对象中分离出来?有没有其他方法可以做到这一点?
发布于 2012-03-12 02:45:40
将可选参数编码为Option[String]
(或Option[java.util.Date]
,但您必须实现自己的QueryStringBindable[Date]
):
def birthdays(from: Option[String], to: Option[String]) = Action {
// …
}
并声明以下路由:
GET /birthday controllers.Application.birthday(from: Option[String], to: Option[String])
发布于 2012-03-13 17:09:50
对于java用户来说,一种可能不太干净的方法是设置默认值:
GET /users controllers.Application.users(max:java.lang.Integer ?= 50, page:java.lang.Integer ?= 0)
在控制器中
public static Result users(Integer max, Integer page) {...}
另一个问题是,每当链接到模板中的页面时,都必须重复默认设置
@routes.Application.users(max = 50, page = 0)
发布于 2013-03-27 22:52:15
下面是Julien用java重写的例子,使用F.Option:(从play 2.1开始工作)
import play.libs.F.Option;
public static Result birthdays(Option<String> from, Option<String> to) {
// …
}
路由:
GET /birthday controllers.Application.birthday(from: play.libs.F.Option[String], to: play.libs.F.Option[String])
您也可以选择任意的查询参数作为字符串(您必须自己进行类型转换):
public static Result birthdays(Option<String> from, Option<String> to) {
String blarg = request().getQueryString("blarg"); // null if not in URL
// …
}
https://stackoverflow.com/questions/9657163
复制相似问题