【发布时间】:2015-12-16 17:57:08
【问题描述】:
有没有办法将参数传递到 Writes 中,我将能够控制 JsValue 的写入方式?
这就是现在的样子:
implicit val myClassWrites = new Writes[MyClass] {
override def writes(l: MyClass): JsValue = Json.obj("a" -> l.a, "b" -> l.b)
}
但我想做这样的事情:
implicit val myClassWrites = new Writes[MyClass] (extended: Option[Boolean]) {
override def writes(l: MyClass): JsValue = {
extended match{
case true => //do something
case false => //do something else
}
}
}
有没有一种优雅的方式来实现这一点?或类似的东西?
我设法用这样的读物来实现这个需求(删除隐式):
def myClassReads(c: String) : Reads[MyClass] = (
Reads.pure(c) and
(JsPath \ "a").read[String] and
(JsPath \ "b").read[String]
) (MyClass.apply _)
然后当我想使用读取时(通常在我想验证请求正文时在控制器中)我这样做:
request.body.validate[MyClass](MyClass.myClassReads("foo")).fold(
errors => //
myClass=> // do domething
)
因此,Writes 仍然是一个谜。
【问题讨论】:
标签: json scala playframework-2.0