我正在使用 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/