【问题标题】:mapper.readValue(json, Hello.class) return object is not equals to expected objectmapper.readValue(json, Hello.class) 返回对象不等于预期对象
【发布时间】:2016-06-12 08:30:25
【问题描述】:

我正在比较两个对象,但预期对象不等于实际对象。但它们具有相同的值。请提供一些帮助。

为什么?

public testJsonToObject() {    
     Hello expected = new Hello();
     String json = "{\"id\":5,\"name\":\"Family\",\"deleteable\
 ":\"false\"}";    
     Hello actual = (Hello) mapper.readValue(json, Hello.class);
     System.out.println("Family " + actual);
     expected.setId(5);
     expected.setName("Family");
     expected.setDeleteable(false);
     System.out.println(expected);
     Assert.assertEqual(expected, actual);
  }

简单的Pojo Class Hello

public class Hello {

 private int id;
 private String name;    
 private boolean deleteable;     


  /* Getter and Setters*/

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public boolean isDeleteable() {
  return deleteable;
 }
 public void setDeleteable(boolean deleteable) {
  this.deleteable = deleteable;
 }

}

为什么这没有给我预期的结果OK

【问题讨论】:

  • 您正在比较对象引用而不是值。
  • 您依赖于继承自 Object 类的 equals 实现。您需要自己覆盖它。
  • 请改进上面的代码,@Nfear。谢谢你。因为我希望这两个对象在 mapper.readValue(json,Hello.class); 之后是相同的;

标签: java json mongo-jackson-mapper


【解决方案1】:

试试这个....

if ( (expected.getId == actual.getId) && (expected.getName.equals(actual.getName))&& (expected.isDeleteable == actual.isDeleteable) ) { 
            System.out.println( "OK" );
        }

而不是...

if ( expected.equals( actual ) ) {  // Reference Checking not the value actually .
        System.out.println( "OK" );
    }

if ( expected.equals( actual ) )这里的equals方法属于对象类,它实际上检查引用而不是包装的对象/变量值。

【讨论】:

  • 感谢您的回复。但我知道两者都有相同的价值观。但我想通过 mapper.readvalue(json, class) 测试这两个对象。因为 Assert.assertEqual(expected, actual) 在这种情况下为假。
  • 试着理解有两个克隆,并且它们彼此独立,它们包含相同的行为和状态并不重要。如果你想比较这些对象而不看内部,那么试试 Comparable as以上建议..谢谢
【解决方案2】:

您可以尝试实现Comparable 以允许通过以下方式进行比较:

expected.compareTo(actual);

compare(expected, actual);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    相关资源
    最近更新 更多