1

我正在跟随Play!http://mandubian.com/2013/01/13/JSON-Coast-to-Coast/上的 2.1 海岸到海岸教程,但即使是最琐碎的示例也无法正常工作。

当我编译我的项目时,我得到一个错误:

找不到参数化简器的隐式值: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")
  }
}

为了让这个工作,我缺少什么?

4

1 回答 1

0

这里的语法不太正确。'pick' 返回一个 JsValue(Play! 等效于有效的 Json 类型,包括字符串、数组等)。

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

实际上,我还没有找到“pick”的好用例。'\' 语法似乎可以用更少的代码和混乱来完成等效的工作。

于 2013-04-27T02:50:40.173 回答