MongoDB的ObjectID作为JSON使用lift-json



我在一些REST API中使用Bowler框架(内部使用lift-json模块进行繁重的提升),并有以下case类:

case class Item(_id : ObjectId, name : String, value : String)

当我返回这个案例对象回到客户端,我需要包括_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

这是固定的。需要定义我自己的RenderStrategy类,以便覆盖格式声明。这篇文章有更多的细节http://blog.recursivity.com/post/5433171352/how-bowler-does-rendering-maps-requests-to-objects

相关内容

  • 没有找到相关文章