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}
我正在将 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 customJsonProtocol
you can enforce the rendering of undefined members asnull
.
例如
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}