Spray-Json:将None序列化为null

Spray-Json: serialize None as null

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

旧 API 有以下回复:

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

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

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

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

我最终得到

{
    "result": { ... }
}

并且它完全删除了错误值

NullOption trait 应该序列化 null

The NullOptions trait supplies an alternative rendering mode for optional case class members. Normally optional members that are undefined (None) are not rendered at all. By mixing in this trait into your custom JsonProtocol you can enforce the rendering of undefined members as 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}