首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Play框架中处理可选查询参数

如何在Play框架中处理可选查询参数
EN

Stack Overflow用户
提问于 2012-03-12 01:29:44
回答 5查看 55.7K关注 0票数 74

假设我在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“规范中表达吗?或者,响应控制器方法是否应该以某种方式将参数从请求对象中分离出来?有没有其他方法可以做到这一点?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-03-12 02:45:40

将可选参数编码为Option[String] (或Option[java.util.Date],但您必须实现自己的QueryStringBindable[Date]):

代码语言:javascript
复制
def birthdays(from: Option[String], to: Option[String]) = Action {
  // …
}

并声明以下路由:

代码语言:javascript
复制
GET   /birthday       controllers.Application.birthday(from: Option[String], to: Option[String])
票数 62
EN

Stack Overflow用户

发布于 2012-03-13 17:09:50

对于java用户来说,一种可能不太干净的方法是设置默认值:

代码语言:javascript
复制
GET  /users  controllers.Application.users(max:java.lang.Integer ?= 50, page:java.lang.Integer ?= 0)

在控制器中

代码语言:javascript
复制
public static Result users(Integer max, Integer page) {...}

另一个问题是,每当链接到模板中的页面时,都必须重复默认设置

代码语言:javascript
复制
@routes.Application.users(max = 50, page = 0)
票数 19
EN

Stack Overflow用户

发布于 2013-03-27 22:52:15

下面是Julien用java重写的例子,使用F.Option:(从play 2.1开始工作)

代码语言:javascript
复制
import play.libs.F.Option;
public static Result birthdays(Option<String> from, Option<String> to) {
  // …
}

路由:

代码语言:javascript
复制
GET   /birthday       controllers.Application.birthday(from: play.libs.F.Option[String], to: play.libs.F.Option[String])

您也可以选择任意的查询参数作为字符串(您必须自己进行类型转换):

代码语言:javascript
复制
public static Result birthdays(Option<String> from, Option<String> to) {
  String blarg = request().getQueryString("blarg"); // null if not in URL
  // …
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9657163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档