【问题标题】:Decorate JSON on server side after request received play framework收到请求后在服务器端装饰 JSON 播放框架
【发布时间】:2014-05-14 19:04:25
【问题描述】:

不确定这是否可能,但我有一个类似于以下简化版本的模型案例类

案例类 MyEntity(userName: String, firstName:String,lastName:String)

我有相应的读写 JSON 组合器。

当前端发送请求时,“用户名”永远不会传递到传入的 JSON 中,但这是将模型保存到数据库中的强制属性。从 requestHeader 等中获取“用户名”是服务器的责任。服务器有该信息。由于 userName 并不是一个真正的可选字段(并且不是客户端在每个 JSON 请求中填充它的责任)我在想是否有办法在传入的 JSON 进入读取组合器(并得到验证)之前修改它,所以模型 MyEntity 是完整的并且符合读取验证条件。

传入的 JSON

{
  "firstName" : "MyFirstName",
  "lastName" : "MyLastName"
}

希望从客户那里收到后看起来像下面这样。

{
   "userName" : "kerberosId",
   "firstName" : "MyFirstName",
   "lastName" : "MyLastName"
}

可能是某种装饰器模式。有没有一种优雅的方法来处理这个?我了解 JSON 请求的模型类应该只具有支持/验证传入请求的结构,但不希望有另一个案例类,其中包含数据库保存所需的所有信息。

【问题讨论】:

  • 不是很优雅的解决方案,但你可以这样做(request.body.as[JsObject] ++ Json.obj("userName" -> "kerberosId")).validate[User]

标签: scala playframework


【解决方案1】:

看看JSON transformers。您可以使用转换器转换 JSON 结构,例如所以:

import play.api.libs.json._

def usernameAppender = __.json.update(
  __.read[JsObject].map { o => o ++ Json.obj("kerberosId" -> kerberosId) }
)

json.transform(usernameAppender)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多