如何强制播放框架 2.4.x 序列化具有空列表的字段
Posted
技术标签:
【中文标题】如何强制播放框架 2.4.x 序列化具有空列表的字段【英文标题】:HowTo enforce Play framework 2.4.x to serialize field with empty list 【发布时间】:2016-11-05 20:27:17 【问题描述】:我正在使用 scala 游戏! 2.4.x 并尝试序列化案例类:
case class MyEvent(
id: String,
parentId: Option[ParentRef] = None,
stepStatus: String = "undefined",
artifacts:Seq[String] = Seq.empty,
events:Seq[String] = Seq.empty
)
问题在于序列化的 json 不包含字段 artifacts 和 events,因为它们的默认值是空序列。 Receiver 希望获得字段名称,即使它们是空的。 我必须强制 json 序列化程序添加 "artifacts": [], "events":[]
不手动编写整个格式化程序的正确方法是什么?我有几十个字段。
【问题讨论】:
您可以将artifacts
和events
成员设为Option[Seq[String]]
吗? AFAIK 没有其他不涉及手动编写 Reads/Format
的方法。
你的意思是在接收方?不,这是不可能的。
当试图重现这一点时,我似乎发现了 2.3 和 2.4 之间的一些行为差异。还不能解决。在 2.3 中,肯定存在工件和事件,并且有几个 SO 问题是关于试图抑制它们。我知道没有帮助。如果您解决了,请告诉我们。
【参考方案1】:
所以,对于 2.4.x,它是这样工作的:
case class MyEvent(
id: String,
parentId: Option[ParentRef] = None,
stepStatus: String = "undefined",
artifacts:Seq[String] = Seq(),
events:Seq[String] = Seq()
)
Seq() 强制播放 json 生成 "events": [] 这对我来说很好。我发现 play-json 的东西有点过度设计。 :( 我真的很想念我过去的 Java 中的 google Gson :) 非常简单,而且可以正常工作。
【讨论】:
以上是关于如何强制播放框架 2.4.x 序列化具有空列表的字段的主要内容,如果未能解决你的问题,请参考以下文章
Qt Multimedia - 如何强制从媒体文件中读取标签
通过ffmpeg直播HLS,如何强制客户端从头开始播放?从第一段