玩!找不到参数reducer的隐含值

时间:2013-04-19 02:38:09

标签: scala playframework playframework-2.1

我跟着Play玩了! 2.1 http://mandubian.com/2013/01/13/JSON-Coast-to-Coast/的海岸到海岸教程,但即使是最简单的工作也无法实现。

编译项目时出错:

  

找不到参数reducer的隐含值:play.api.libs.functional.Reducer [play.api.libs.json.JsString,B]

我的控制器代码如下:

package controllers

import play.api._
import play.api.mvc._

import play.api.libs.json._
import play.api.libs.json.Reads._
import play.api.libs.functional.syntax._

object MyController extends Controller{

  val validate = (
    (__ \ 'title).json.pick[JsString] and
    (__ \ 'desc).json.pick[JsString]
  ).reduce

  def test() = Action { implicit request =>
    Ok("test")
  }
}

我错过了什么让这个工作?

1 个答案:

答案 0 :(得分:0)

这里的语法不太正确。 'pick'返回一个JsValue(Play!相当于有效的Json类型,包括String,Array等)。

要验证多个json字段,您需要使用'pickBranch',它返回一个JsObject(基本上相当于Map [String,JsValue])。我猜测reduce是几个JsObjects的合并操作。

我实际上还没有为'pick'找到一个好的用例。 '\'语法似乎可以用更少的代码和混乱来完成相同的工作。