gpt4 book ai didi

spring-boot - 在集成 springboot 测试中无法识别自定义 Jackson2ObjectMapperBuilder

转载 作者:行者123 更新时间:2023-12-05 05:21:04 25 4
gpt4 key购买 nike

全部

我在我的主要 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() ) );
}

其中 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 为 null,我看到一个错误:没有配置 FilterProvider

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/main/java/com/a/b/c/Application.java
src/main/java/com/a/b/c/controller/ControllerA.java

src/test/java/com/a/b/c/controller/IntegrationTest.java

最佳答案

我通过在主应用程序文件中以稍微不同的方式配置 Jackson2ObjectMapperBuilder 来实现这一点,如下所示。但我仍然不知道为什么 Autowiring 方法不起作用。

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

我仍然想知道在测试上下文中,为什么自动配置的 Jackson2ObjectMapperBuilder 在用 @Bean 替换它时没有被用于自定义。

关于spring-boot - 在集成 springboot 测试中无法识别自定义 Jackson2ObjectMapperBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43534216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com