使用Spray JSON自定义JSON对象属性名称

9
我正在使用spray-json序列化一个基于类层次结构的对象树,比如这样:

trait Base {
  val _id: Long
}

case class Person(_id: Long, firstName: String, lastName: String) extends Base
case class Company(_id: Long, name: String) extends Base

这只是一个人为设置的例子,实际的代码库包含许多类和字段。然而,基本思想是有一个包含一些共同值的trait。 现在的问题是是否有一种方法可以格式化JSON,使属性名称为id而不是_id
在你着手扩展JsonFormat之前,问题是是否可以为所有扩展了Base的类实现这个功能,而不必为每个类编写格式。正如我所提到的,有很多类,为每个类实现自定义格式将非常繁琐,而且我认为需要进行大量的维护。如果我能注释Base中的_id val,那就太好了。有什么方法可以避免为每个类都实现格式吗?

7
你可以使用 jsonFormat(Person, "id", "firstName", "lastName") 来设置字段的名称(而不是使用 jsonFormat3(Person))。 - jrudolph
@jrudolph 这并不是理想的解决方案,因为我仍然需要为每个类单独定义它。但是,使用spray-json可能是最简单的方法。您能否在此处将其编写为答案,以便我可以将其标记为最佳答案?谢谢! - yby
2
啊,人们一直在使用的另一个可能性是覆盖ProductFormat.extractFieldNames以提供名称的通用映射。 - jrudolph
1个回答

17

以下是 jrudolph 的评论,转成回答形式方便大家查看。很棒的解决方案!

你可以使用 jsonFormat(Person, "id", "firstName", "lastName") 来设置字段名称(而不是使用 jsonFormat3(Person))。

jrudolph,如果您把评论修改为回答,我会删除这个评论。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接