【问题标题】:@JsonIgnore is ignored in JUnit-Controller-Unit Test with Mockito@JsonIgnore 在使用 Mockito 的 JUnit-Controller-Unit 测试中被忽略
【发布时间】:2014-03-11 01:32:56
【问题描述】:

我已经构建了我的第一个 Spring-Controller 单元测试,一个控制器返回一个 JSON 格式的对象。关系用 @JsonIgnore 注释,它在我的软件中工作。

当我只是想测试那些控制器时,我总是会在那个属性上得到一个无限递归错误。这是1:1的关系。在其他关系上,@JsonIgnore 可以正常工作。

测试错误: save(package.a.b.c.test.ControllerATest):请求处理失败;嵌套异常是 org.springframework.http.converter.HttpMessageNotWritableException: 无法写入 JSON: 无限递归 (StackOverflowError) (通过引用链: package.abcentity.A["b"]->package.abcB["a"] 等...

好像我的@JsonIgnore 在测试范围内被忽略了?

这是一个 Maven 管理的项目,所以我像这样包含

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
</dependency>

也许有人有同样的经历?

【问题讨论】:

    标签: spring unit-testing maven junit jackson


    【解决方案1】:

    是字段上的注释还是它们的getter? Jackson 默认只查看 getter,因此将注释移动到 getter 将解决问题。例如:

    class Person {
        @JsonIgnore
        Set<Department> departments;
    
        public Set<Department> getDepartments() { return this.departments; }
    }
    
    class Department {
        @JsonIgnore
        Set<Person> persons;
    
        public Set<Person> getPersons() return this.persons; }
    }
    

    如果PersonDepartment 对象相互引用,将导致无限递归。

    以下将起作用:

    class Person {
        Set<Department> departments;
    
        @JsonIgnore
        public Set<Department> getDepartments() { return this.departments; }
    }
    
    class Department {
        Set<Person> persons;
    
        @JsonIgnore
        public Set<Person> getPersons() return this.persons; }
    }
    

    【讨论】:

      【解决方案2】:

      我刚刚发现,它与对象中的双向 1:1 关系有关。切换到具有以下依赖项的更新版本 2.3.1 解决了该问题:

          <dependency>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-core</artifactId>
              <version>2.3.1</version>
          </dependency>
          <dependency>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-databind</artifactId>
              <version>2.3.1</version>
          </dependency>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多