2017-04-21 262 views
1

所有定制Jackson2ObjectMapperBuilder在集成测试springboot无法识别

我在Spring的主引导程序类,如下定制Jackson2ObjectMapperBuilder

public static void main(String[] args) { 
    SpringApplication.run(Application.class, args); 
} 

@Autowired 
public void configureJackson(Jackson2ObjectMapperBuilder builder) { 
    builder.filters(new SimpleFilterProvider().addFilter("customFilter", new ExampleFilter())); 
} 

其中ExampleFilterSimpleBeanPropertyFilter的延伸。 我的POJO注有Jackson的@JsonFilter("customFilter")
我已经使用@RestController@GetMapping注释通过HTTP公开了POJO。 这工作正常,当我运行应用程序并访问终点时,调用自定义筛选器。

现在我有一个如下所示的集成测试。

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 
public class IntegrationTest { 

    @LocalServerPort 
    private int port; 

    @Autowired 
    private TestRestTemplate restTemplate; 

    @Test 
    public void getUser() throws Exception { 
     POJO obj = this.restTemplate.getForObject("http://localhost:" + this.port + "/pojo", POJO.class); 

     Assertions.assertThat(obj).isNotNull(); 
     Assertions.assertThat(obj.getFirstName()).isEqualTo("Jane"); 
     Assertions.assertThat(obj.getLastName()).isEqualTo("Doe"); 
     Assertions.assertThat(obj.getAge()).isEqualTo("24"); 
    } 
} 

当我运行测试,obj的当属无效,我看到一个错误,no FilterProvider configured

Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: Can not resolve PropertyFilter with id 'customFilter'; no FilterProvider configured; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not resolve PropertyFilter with id 'customFilter'; no FilterProvider configured 

什么我做错了,我怎么纠正呢?

我的文件夹结构是:
的src /主/ JAVA/COM/A/B/C/Application.java
的src /主/ JAVA/COM/A/B/C /控制器/ ControllerA.java

的src /测试/ JAVA/COM/A/b/C /控制器/ IntegrationTest.java

回答

0

我通过在主应用程序文件的方式略有不同配置Jackson2ObjectMapperBuilder得到这个工作如下所示。但我仍然不知道为什么Autowiring方法不起作用。

@Bean 
public Jackson2ObjectMapperBuilder objectMapperBuilder() { 
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); 
    builder.filters(new SimpleFilterProvider().addFilter("customFilter", new ExampleFilter())); 
    return builder; 
} 

我还是想知道,在测试范围内,为什么自动配置Jackson2ObjectMapperBuilder而与@Bean作品取代它不拿起定制。