Spray- Json: сериализация None как ноль - PullRequest
2 голосов
/ 19 марта 2020

Я портирую API отдыха на scala, используя akka-http with spray- json.

У старого API был следующий ответ:

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

Теперь я Я хочу поддерживать точную обратную совместимость, поэтому, когда нет ошибки, я хочу ключ error со значением null.

Однако я не вижу никакой поддержки для этого в spray- json. Когда я сериализирую следующее с ошибкой None:

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

Я получаю

{
    "result": { ... }
}

И это полностью сбрасывает значение ошибки

1 Ответ

1 голос
/ 19 марта 2020
Черта

NullOption должна сериализировать нули

Черта NullOptions предоставляет альтернативный режим рендеринга для необязательных членов класса case. Обычно необязательные элементы, которые не определены (None), вообще не отображаются. Смешивая эту черту с вашим пользовательским JsonProtocol, вы можете принудительно отобразить неопределенные элементы как 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}
...