Я использую Bowler framework для некоторых REST API (внутренне использует модуль lift-json для тяжелых работ) и имеет следующий класс case:
case class Item(_id : ObjectId, name : String, value : String)
Когда я возвращаю этот объект case обратно клиенту, мне нужно включить значение в поле _id. Однако столбец _id возвращается в виде пустого списка в выводе Json вместо его фактического значения.
{"_id":{},"name":"Id Test","value":"id test"}
Будем весьма благодарны за любые указания на то, как это можно исправить.
Обновление: я попытался использовать собственный сериализатор для него, но по какой-то причине он не вызывается!
class ObjectIdSerializer extends Serializer[ObjectId] {
private val Class = classOf[ObjectId]
def deserialize(implicit format: Formats) = {
case (TypeInfo(Class, _), json) => json match {
case JObject(JField("_id", JString(s)) :: Nil) => new ObjectId(s)
case x => throw new MappingException("Can't convert " + x + " to ObjectId")
}
}
def serialize(implicit format: Formats) = {
case x: ObjectId => { println("\t @@@@@@@@Custom Serializer was called!"); JObject(JField("_id", JString(x.toString)) :: Nil)}
}
}
implicit val formats = DefaultFormats + new ObjectIdSerializer