2017-04-21 38 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作品取代它不拿起定製。