上周,我花了很多(太多)时间在一个奇怪的问题上。我想使用gnieh.diffson来修补现有的对象,客户端用格式良好的Json修补程序发送PATCH /api/test/patch请求。然后解析该修补程序并应用它:
import gnieh.diffson._
val patch = JsonPatch.parse(request.body.asText.getOrElse(""))
val workspace = """{"node":{}}"""
val result = patch(workspace)
println(result)这段代码在简单的App中运行良好,但在play Controller上失败:
错误PatchException::元素节点不存在于“{\”节点\“:{}}”(JsonPatch.scala:140)中 误差gnieh.diffson.Operation.action(JsonPatch.scala:140) 误差gnieh.diffson.Add.action(JsonPatch.scala:174) .
解决办法是限定每件事。
gnieh.diffson.JsonPatch#apply类有3个apply方法:
def apply(json : scala.Predef.String, compacted : scala.Boolean = { /* compiled code */ }) : scala.Predef.String = { /* compiled code */ }
def apply(value : net.liftweb.json.JValue) : net.liftweb.json.JValue = { /* compiled code */ }
def apply[T](<value : T>)(implicit evidence\$1 : scala.Predef.Manifest[T]) : T = { /* compiled code */ } 我在想,第一个被调用是因为“工作区”是一个字符串,但我错了。被调用的方法是最后一种方法,有隐含的证据。
我目前的解决方案是将工作区解析为一个net.liftweb.json.JValue,但我对此并不满意,因为:
net.liftweb.json.JValue格式化为string以重新创建一个play.api.libs.json.JsObject。(因为我在以后的过程中需要它)你能解释一下为什么被调用的方法比较复杂吗?
非常感谢
发布于 2014-11-12 09:33:51
合同中有一个条款,它抛弃了使用默认args的替代方案:
http://www.scala-lang.org/files/archive/spec/2.11/06-expressions.html#overloading-resolution
https://stackoverflow.com/questions/26883325
复制相似问题