我将Spring Boot和jongo / mongo结合起来创建一个不使用POJO的动态mongo应用程序。进出数据库的所有内容都是Map<String, Object>
。除了一件事,我一切都按照我想要的方式工作。我不想将_id
从mongo发送到客户端。该系统使用“标记过时并插入新记录”更新样式,以便我们可以维护文档的更改历史记录。因此,我不希望任何客户端甚至被诱惑使用_id
字段,我还有另一个我希望它们使用。
现在我找到了各种关于如何忽略pojo中的字段的例子,但是我想编写一个忽略地图特定值的Jackson Map序列化器。我还找不到那样的东西。我想gson也会这样做,我现在没有为gson配置弹簧。
任何想法如何编写这个序列化器?
答案 0 :(得分:0)
我不会试图让杰克逊完成mongo可以做的工作。
mongo documentation明确地有一个名为返回所有但排除字段的用例,这正是您想要的:
db.inventory.find( { fieldA: "A" }, { _id: 0 } )
获取fieldA设置为&#34; A&#34;的所有文档,返回除_id
字段外的所有字段。
您当然上面的查询是JavaScript Mongo查询语言,但是将它转换为Mongo Java API时不应该遇到问题。
答案 1 :(得分:0)
如果项目中有Guava,请过滤地图:
Map<String, Object> filtered = Maps.filterKeys(map, (k)-> !"_id".equals(k));
序列化已过滤的地图。
没有番石榴,请复制地图。致电copy.remove("_id")
。
序列化副本。