我在某些REST API中使用Bowler框架(内部使用lift-json模块进行繁重的工作)并具有以下案例类:
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
答案 0 :(得分:0)
这是固定的。需要定义我自己的RenderStrategy类以覆盖格式声明。这篇文章有更多详细信息http://blog.recursivity.com/post/5433171352/how-bowler-does-rendering-maps-requests-to-objects