2017-03-31 56 views
0

我将Spring Boot和jongo/mongo结合起来创建了一个不使用POJO的动态mongo应用程序。一切进出数据库是Map<String, Object>。除了一件事外,我的一切都按照我想要的方式工作。我不想将mongo的_id发送给客户端。该系统使用“标记已过时并插入新记录”的更新风格,以便我们可以维护文档的更改历史记录。因此,我不希望任何客户甚至试图使用_id字段,我有另一个我希望他们使用。让jackson忽略地图中的字段

现在我找到了关于如何忽略pojo中字段的各种示例,但是我想编写一个忽略地图特定值的Jackson Map序列化程序。我还找不到像这样的东西。我想gson会做得很好,我目前没有为gson配置spring。

任何想法如何写这个序列化程序?

回答

0

我不会试图让杰克逊做mongo的工作。

mongo documentation明确了名为返回所有,但排除字段这正是你想要的用例:

db.inventory.find({ fieldA: "A" }, { _id: 0 }) 

获取所有文件与FIELDA设置为“A”,返回所有字段,但_id字段除外。

您当然以上的查询是JavaScript Mongo查询语言,但您不应该将问题转换为Mongo Java api。

+0

完美。在Jongo中,这条线最终成为'inventory.find()。projection(“{_id:0}”)。as(Map.class)' – scphantm

0

如果你在你的项目有Guava,过滤你的地图:

Map<String, Object> filtered = Maps.filterKeys(map, (k)-> !"_id".equals(k)); 

序列化映射过滤。

没有番石榴,请复制地图。致电copy.remove("_id")。 序列化副本。