scala - 如何在游戏框架表单中定义默认值可选字段?

标签 scala playframework playframework-2.0

我正在使用 scala 2.0.2 play 框架实现一个 Web api。我想提取并验证一些获取参数。为此,我使用了一个游戏“表单”,它允许我定义可选字段。

问题: 对于这些可选字段,如果未传递参数,我需要定义一个默认值。 该代码旨在正确解析这三个用例:

  • /test?top=abc(错误,abc不是整数)
  • /test?top=123(有效,top 为 123)
  • /test(有效,顶部为 42(默认值))

我想出了以下代码:

def test = Action {
  implicit request =>

  case class CData(top:Int)

  val p = Form(
    mapping(
      "top" -> optional(number)
    )((top) => CData($top.getOrElse(42))) ((cdata:CData) => Some(Some(cdata.top)))
  ).bindFromRequest()

  Ok("all done.")
}

代码可以工作,但绝对不优雅。有很多样板只是为了为缺少的请求参数设置默认值。

有人可以建议一个更干净、更巧合的解决方案吗?

最佳答案

在 Play 2.1 中

val p = Form(
    mapping(
      "top" -> default(number,42)
    )(CData.apply)(CData.unapply)
  ).bindFromRequest()

会做你想做的事。

关于scala - 如何在游戏框架表单中定义默认值可选字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11379604/

相关文章:

scala - 如何将 "instantiate"抽象类放在父类(super class)中?

java - 使用 PlayFramework 在 Azure 网站中登录

java - 如何将 webapp_config.txt 包含到 Play 的 dist zip 中?

mysql - 原始 SQL 查询中多种类型的 Scala Slick 隐式转换

Scalatest 假设数据库在每个测试中都可用

scala - -Xdisable-assertions 和 -Xelide-below 不关闭断言

playframework - Play 莫名报告类 "already defined"

使用 Nginx 和 Play Framework 2.2.x 的 SSL

scala - Akka actor并发问题

playframework - Play Framework : How to Get the Hostname Where the Application in Running