当 table 字段在 Slick Play 中为 Null 时保持 JSON 输出一致
Keep JSON output consistent when table field is Null in Slick Play
我试图不将 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
字段?
您可以使用 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}
我试图不将 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
字段?
您可以使用 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}