【问题标题】:Spray-Json: serialize None as nullSpray-Json:将 None 序列化为 null
【发布时间】:2020-06-30 17:53:02
【问题描述】:

我正在将一个 rest API 移植到 scala,使用 akka-http 和 spray-json。

旧 API 有以下响应:

{
    "result": { ... },
    "error": null
}

现在我想保持精确的向后兼容性,所以当没有错误时,我想要一个带有 null 值的 error 键。

但是我在 spray-json 中看不到对此的任何支持。当我用None 错误序列化以下内容时:

case class Response(result: Result, error: Option[Error])

我结束了

{
    "result": { ... }
}

而且它完全降低了错误值

【问题讨论】:

    标签: scala akka-http spray-json


    【解决方案1】:

    NullOption trait 应该序列化 null

    NullOptions trait 为 可选的案例类成员。通常是可选的成员 undefined (None) 根本不渲染。通过将这种特性混合到 您的自定义 JsonProtocol 您可以强制呈现 undefined 成员为null

    例如

    import spray.json._
    
    case class Response(result: Int, error: Option[String])
    
    object ResponseProtocol extends DefaultJsonProtocol with NullOptions {
      implicit val responseFormat = jsonFormat2(Response)
    }
    import ResponseProtocol._
    
    Response(42, None).toJson
    // res0: spray.json.JsValue = {"error":null,"result":42}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-08
      • 2014-04-07
      • 2016-06-22
      • 2023-03-10
      • 2019-03-08
      • 2016-07-22
      相关资源
      最近更新 更多