首页 > 解决方案 > 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 更改时检测到这种情况。

标签: javers

解决方案


推荐阅读