我试图为从MongoDB获取文档列表的REST支持任意筛选器。例如
我使用的是Play-ReactiveMongo,只处理JSONCollection对象。
所以在我的路线上
GET /users controllers.Users.list(id: Option[String], name: Option[String], age: Option[Int])但这有两个问题,首先,我需要有一个相当长的可选参数列表,然后在控制器中,我需要对所有参数使用模式匹配来检查它们是否为空,还需要构建用于筛选集合的选择器。
var filters = JsObject(Nil)
name match {
case Some(x) => filters += ("name" -> JsString(x))
case None => None
}我意识到可以从请求对象获得完整的查询字符串,即Map[ string,SeqString]。但是,我不知道有什么好方法来检查值是字符串还是其他东西。
还有别的更好更地道的方法来做我想做的吗?
发布于 2014-12-18 05:52:16
可能的解决办法可以是:
在服务器端,只需对模型类进行验证,或者在reactivemongo方法中传递相同的json。
发布于 2016-06-12 17:16:48
也许请求绑定将帮助您根据不同的请求参数创建复杂的对象。
https://www.playframework.com/documentation/2.5.x/ScalaRequestBinders#QueryStringBindable
例如,您可以(从文档中)构建类似的内容:
case class AgeRange(from: Int, to: Int)对于这样的请求:
/age?from=1&to=10现在,您可以将这些属性更改为选项,并创建一个基于当前值创建reactivemongo查询的函数。
https://stackoverflow.com/questions/25992024
复制相似问题