javers - javers中JsonNode的比较
问题描述
人员类
public class Person implements java.io.Serializable{
private static final long serialVersionUID = 1L;
int id;
Address address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
Person(int id, Address address){
this.id=id;
this.address=address;
}
}
地址类
public class Address implements java.io.Serializable {
private static final long serialVersionUID = 1L;
String state;
String city;
CodeInfo codeInfo;
public CodeInfo getCodeInfo() {
return codeInfo;
}
public void setCodeInfo(CodeInfo codeInfo) {
this.codeInfo = codeInfo;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public Address(String state, String city,CodeInfo codeInfo) {
this.state = state;
this.city = city;
this.codeInfo = codeInfo;
}
}
代码信息类
public class CodeInfo implements Serializable {
private static final long serialVersionUID = 1L;
String prop;
public String getProp() {
return prop;
}
public void setProp(String prop) {
this.prop = prop;
}
public CodeInfo(String prop) {
this.prop=prop;
}
}
JaversNewClass
public class JaversNewClass {
private static final ObjectMapper MAPPER = new ObjectMapper();
public static void main(String[] args) {
Diff diff =JaversInstance.getInstance().compare(
MAPPER.valueToTree(new Person(1,new Address("Delhi",null,new
CodeInfo(null)))),
MAPPER.valueToTree(new Person(2,new Address("Noida","SEZ",new
CodeInfo("abc"))))
);
System.out.println(diff.toString());
}
}
差异:
* new object: com.fasterxml.jackson.databind.node.ObjectNode/#_children/address/_children/codeInfo/_children/prop
* changes on com.fasterxml.jackson.databind.node.ObjectNode/ :
- '_children/address/_children/city._value' property with value 'SEZ' added
- '_children/address/_children/codeInfo._children' map changes :
'prop' -> 'com.fasterxml.jackson.databind.node.ObjectNode/#_children/address/_children/city' changed to 'com.fasterxml.jackson.databind.node.ObjectNode/#_children/address/_children/codeInfo/_children/prop'
- '_children/address/_children/state._value' value changed from 'Delhi' to 'Noida'
- '_children/id._value' value changed from '1' to '2'
在当前场景中,我有两个 JsonNode,我正在通过 javers 进行比较。
所以首先我需要知道是否可以以这种方式比较 json 节点。
其次,我需要知道为什么我得到新对象和不相关的地图更改而不是值更改。
但是,它能够正确检测地址更改。当嵌套对象从 null 更改时检测到这种情况。
解决方案
推荐阅读
- excel - 在多个单元格上进行 Vlookup
- html - base64 嵌入的 PDF 文件不会在 Chrome 中呈现
- python - 为什么我不能在 python 中继承地图?
- mysql - 我想使用 sql 查询显示一个特定的博客有多少喜欢和多少评论
- deep-learning - 数据(图像)规范化的一些最佳实践是什么?
- file - 如何使用 golang 将文件移动到另一个文件夹/路径
- python - 在python中合并两个包含对象数组的json文件
- python - Python print - 如何在 print end="\r" 之前清除输出
- javascript - 来自 API Node.js (POKEapi) 的分页 for 循环
- android - 在 android studio 中运行 react-native 应用程序时出现此错误