我跟着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")
}
}
我错过了什么让这个工作?
答案 0 :(得分:0)
这里的语法不太正确。 'pick'返回一个JsValue(Play!相当于有效的Json类型,包括String,Array等)。
要验证多个json字段,您需要使用'pickBranch',它返回一个JsObject(基本上相当于Map [String,JsValue])。我猜测reduce是几个JsObjects的合并操作。
我实际上还没有为'pick'找到一个好的用例。 '\'语法似乎可以用更少的代码和混乱来完成相同的工作。