Настройка имен свойств объекта JSON с помощью Spray JSON

Я использую 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

Это, конечно, надуманный пример, реальная кодовая база содержит множество классов и полей. Идея, однако, в том, что есть черта, которая содержит некоторые общие значения. Теперь вопрос в том, есть ли способ отформатировать JSON таким образом, чтобы вместо _id имя свойства было просто id.

Теперь, прежде чем вы подскочите и предложите расширить JsonFormat, вопрос в том, могу ли я реализовать это только один раз для всех классов, расширяющих Base, без реализации формата для каждого из классов. Как я уже упоминал, существует много классов, и реализация пользовательских форматов для каждого из них была бы довольно утомительной и, как я полагаю, потребует довольно много обслуживания. Было бы неплохо, если бы я мог аннотировать значение _id, например, в Base. Можно ли что-нибудь сделать, чтобы избежать реализации форматов для каждого из классов?


person yby    schedule 20.11.2014    source источник
comment
Вы можете использовать jsonFormat(Person, "id", "firstName", "lastName") для установки имен полей (вместо jsonFormat3(Person)).   -  person jrudolph    schedule 21.11.2014
comment
@jrudolph Это не идеально, потому что мне все еще нужно определить его отдельно для каждого класса. Тем не менее, это, вероятно, самый простой способ использовать spray-json. Не могли бы вы написать это как ответ здесь, чтобы я мог отметить его как лучший ответ? Спасибо!   -  person yby    schedule 23.11.2014
comment
Ах, еще одна возможность, которую люди использовали, — это переопределение ProductFormat.extractFieldNames для обеспечения общего сопоставления имен.   -  person jrudolph    schedule 24.11.2014


Ответы (1)


Вот комментарий Джудольфа в качестве ответа, чтобы люди могли его увидеть. Отличное решение!

Вы можете использовать jsonFormat(Person, "id", "firstName", "lastName") для установки имен полей (вместо jsonFormat3(Person)).

jrudolph, если вы измените свой комментарий на ответ, я удалю это.

person Jon Onstott    schedule 17.11.2015