所有
我在我的主要Spring Boot应用程序类中定制了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() ) );
}
其中ExampleFilter
是SimpleBeanPropertyFilter
的扩展名。
我的POJO用杰克逊的@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变为null,我看到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 :(得分:1)
我通过在主应用程序文件中以稍微不同的方式配置Jackson2ObjectMapperBuilder
来实现此功能,如下所示。但我仍然不知道为什么自动装配方法不起作用。
@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.filters( new SimpleFilterProvider().addFilter( "customFilter", new ExampleFilter() ) );
return builder;
}
我仍然想知道在测试环境中,为什么自动配置的Jackson2ObjectMapperBuilder
在用@Bean
取代时无法进行自定义。