java - JsonNode 比较不包括字段
问题描述
我正在尝试使用ObjectMapper
(Jackson) 反序列化 JSON 字符串并在执行反序列化时排除一个字段。
我的代码如下:
String aContent = new String(Files.readAllBytes(Paths.get(aFile)));
String bContent = new String(Files.readAllBytes(Paths.get(bFile)));
ObjectMapper mapper = new ObjectMapper();
FilterProvider filterProvider = new SimpleFilterProvider()
.addFilter("_idFilter", SimpleBeanPropertyFilter.serializeAllExcept("_id"));
mapper.setFilterProvider(filterProvider);
JsonNode tree1 = mapper.readTree(aContent);
JsonNode tree2 = mapper.readTree(bContent);
String x = mapper.writeValueAsString(tree1);
return tree1.equals(tree2);
x 和 tree1 和 tree2 都包含 JSON 字符串中的值 _id 但它不会被删除。
解决方案
您正在关注使用过滤器忽略字段,除了第一步
首先,我们需要在 java 对象上定义过滤器:
@JsonFilter("myFilter") public class MyDtoWithFilter { ... }
所以目前你应该添加
@JsonFilter("_idFilter")
public class JsonNode {
这是不可能的,因此您需要创建一个扩展JsonNode
并使用它的类
@JsonFilter("_idFilter")
public class MyJsonNode extends JsonNode {
如果您不想实现所有抽象方法,请定义为abstract
@JsonFilter("_idFilter")
public abstract class MyJsonNode extends JsonNode {
}
在您的代码中:
MyJsonNode tree1 = (MyJsonNode) mapper.readTree(aContent);
MyJsonNode tree2 = (MyJsonNode) mapper.readTree(bContent);
推荐阅读
- php - 如何正确处理数组?
- moq - 使用 Autofac 和 Moq 在服务库中模拟代理工厂
- c# - MsBuild PostBuild 目标
- android - 如何删除向上导航箭头和工具栏标题之间的填充?
- c# - 使用服务帐户的 Gmail API 集转发
- haskell - 如何在 Haskell 函数中使用错误?
- maven - 如何设置 maven 在我自己的存储库之前查看中心
- ruby-on-rails - Rails 通过不同对象的形式将参数从一个控制器动作传递到另一个控制器动作
- cloud-foundry - 使 Cloud Foundry API 只能从 Cloud Foundry Web 服务器访问
- c - C - 创建文件时使用“w+”模式