【问题标题】:Keep JSON output consistent when table field is Null in Slick Play当 Slick Play 中的表字段为 Null 时,保持 JSON 输出一致
【发布时间】:2020-01-26 14:33:24
【问题描述】:

我尝试不将 Scala 中的每个字段都标记为 Option

to_date: LocalDateTime

但它给了Compilation Error

 type mismatch;
 found   : None.type
 required: java.time.LocalDateTime

通过使用Option 错误消失了:

to_date: Option[LocalDateTime]

但我遇到了另一个问题,to_date 字段已从 JSON 响应中删除:

UserModel.find(UserId).map {
    case Some(x) => Ok(Json.toJson(x)(userWrites))
    case None => NotFound("user not found!")
} 

在使用Slick 时,如何在Scala Play framework 的JSON 响应中保留to_date 字段?

【问题讨论】:

  • 在 JSON 中,省略的字段等同于 null-valued 字段。它不应该有任何区别。 (P.S.:避免对 Scala 类属性使用蛇形大小写)
  • @cchantep 好吧,它实际上与我们的 Web 客户端不同。问题是我应该如何实现它?
  • 行为良好的客户不应该

标签: scala playframework slick


【解决方案1】:

您可以将OptionHandlers(和JsonNaming)用于自定义JsonConfiguration

import play.api.libs.json._

import java.time.LocalDateTime

case class Foo(toDate: Option[LocalDateTime])

object Foo {
  implicit val writes: OWrites[Foo] = {
    implicit def config = JsonConfiguration(
      naming = JsonNaming.SnakeCase,
      optionHandlers = OptionHandlers.WritesNull)

    Json.writes[Foo]
  }
}

Json.toJson(Foo(Some(LocalDateTime.now())))
// {"to_date":"2020-01-27T10:08:55.742106"}

Json.toJson(Foo(None))
// {"to_date":null}

【讨论】:

    猜你喜欢
    • 2017-04-10
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多