当前位置: 首页 > 知识库问答 >
问题:

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

顾宏朗
2023-03-14

全部的

我在我的主要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。这很好,当我运行应用程序并访问endpoint时,会调用自定义过滤器。

现在我编写了一个集成测试,如下所示。

@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

共有1个答案

徐奇
2023-03-14

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

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

我仍然想知道,在测试环境中,为什么自动配置的Jackson2ObjectMapperBuilder在替换为@Bean时无法进行定制。

 类似资料:
  • 我正在尝试编写一个单元测试到一个自定义反序列化器,该反序列化器是使用一个带有@了的构造函数来实例化的,并且我的实体标有@JsonDesri的。它在我的集成测试中工作得很好,其中MockMvc会带来Spring serverside。 然而,在调用objectMapper.read值(…)的测试中,使用不带参数的默认构造函数的反序列化器的新实例被实例化。即使 实例化有线版本的反序列化程序,实际调用仍

  • 与@mockbean和@spybean一样,有没有类似于@fakebean/@dummybean的东西? 其思想是,该实例是100%真实的(具有预期的生产内部状态),并且它覆盖(或者添加bean,以防在配置中没有声明)上下文中的bean。理想情况下,您不需要创建TestConfiguration类并将其设置为Primary,因为这样可以在每个测试的基础上控制假冒,只有在需要时才可以。否则它使用主的

  • 问题内容: 我一直在尝试测试GMail动作几天,但似乎无法正常工作。由于我尚未注册,因此我使用下面的Java小代码使用GMail的smtp服务器向自己发送电子邮件。邮件的正文是文档的直接副本。 不过,Apps Script版本有效。 问题答案: 甚至测试电子邮件也需要使用DKIM / SPF签名,以防止欺骗,而且我不确定SMTP是否有办法做到这一点。 如果您不想使用Apps脚本,则最好的选择是Go

  • 我在SpringBoot 2上有一个应用程序。x个 pom。xml 这是应该自动连接的类。。。 pom。xml 更新 这个类来自类似的项目,它可以工作(但Intellij的想法将字段标记为错误) 在src/test/java/weblogic/war/Spring/boot/service/read/CompanyReadServiceTest.java 我复制了一个项目。 更新\u 2 我清除了

  • 我正在使用一个带有spring boot 2.0.0.rc1的多项目分级器。我的子项目之一是SpringBoot应用程序,其中包含了我的集成测试。 集成测试用WebEnvironment.random_port标记为@springboottest。由于未解析的依赖关系(在另一个子项目中声明的服务,的同级),测试失败,使用了gradle命令行,但在Eclipse IDE中成功。 如果有人有主意?如何