让杰克逊忽略地图中的字段

时间:2017-03-31 13:31:16

标签: java spring jackson

我将Spring Boot和jongo / mongo结合起来创建一个不使用POJO的动态mongo应用程序。进出数据库的所有内容都是Map<String, Object>。除了一件事,我一切都按照我想要的方式工作。我不想将_id从mongo发送到客户端。该系统使用“标记过时并插入新记录”更新样式,以便我们可以维护文档的更改历史记录。因此,我不希望任何客户端甚至被诱惑使用_id字段,我还有另一个我希望它们使用。

现在我找到了各种关于如何忽略pojo中的字段的例子,但是我想编写一个忽略地图特定值的Jackson Map序列化器。我还找不到那样的东西。我想gson也会这样做,我现在没有为gson配置弹簧。

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

2 个答案:

答案 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")。 序列化副本。