Java 让jackson忽略地图中的字段

Java 让jackson忽略地图中的字段,java,spring,jackson,Java,Spring,Jackson,我将Spring Boot和jongo/mongo结合起来,创建一个不使用POJO的动态mongo应用程序。数据库内外的所有内容都是一张地图。除了一件事,我的一切都按照我想要的方式进行。我不想从mongo向客户端发送\u id。此系统使用“标记过时并插入新记录”样式的更新,因此我们可以维护文档的更改历史记录。因此,我甚至不希望任何客户机尝试使用\u id字段,我希望他们使用另一个字段 现在我找到了关于如何在pojo中忽略字段的各种示例,但我想编写一个Jackson映射序列化程序来忽略映射的特定值

我将Spring Boot和jongo/mongo结合起来,创建一个不使用POJO的动态mongo应用程序。数据库内外的所有内容都是一张
地图
。除了一件事,我的一切都按照我想要的方式进行。我不想从mongo向客户端发送
\u id
。此系统使用“标记过时并插入新记录”样式的更新,因此我们可以维护文档的更改历史记录。因此,我甚至不希望任何客户机尝试使用
\u id
字段,我希望他们使用另一个字段

现在我找到了关于如何在pojo中忽略字段的各种示例,但我想编写一个Jackson映射序列化程序来忽略映射的特定值。我还找不到类似的东西。我想gson也可以,我只是目前没有为gson配置spring


你知道怎么写这个连载器吗?

我不会让Jackson做mongo能做的工作

显式有一个名为Return All的用例,但排除的字段除外,这正是您想要的:

db.inventory.find( { fieldA: "A" }, { _id: 0 } )
获取字段A设置为“A”的所有文档,返回除
\u id
字段之外的所有字段

您当然知道上面的查询是JavaScript Mongo查询语言,但将其转换为Mongo Java api应该不会有问题。

如果您的项目中有,请过滤地图:

Map<String, Object> filtered = Maps.filterKeys(map, (k)-> !"_id".equals(k));
Map filtered=Maps.filterKeys(Map,(k)->!“_id”.equals(k));
序列化过滤后的映射

如果没有番石榴,复制一份地图。调用
copy.remove(“\u id”)

序列化副本。

完美。在Jongo中,该行最后是
inventory.find().projection(“{u id:0}”).as(Map.class)