@AutoConfigureMockMvc如何设置消息转换器

问题描述

使用 @AutoConfiguremockmvc 时如何指定消息转换器?

考虑以下示例:

@SpringBoottest(classes = SomeController.class)
@AutoConfiguremockmvc
@WithMockUser
class SomeControllerTestIT {

    @Autowired
    private mockmvc mockmvc;

    @Autowired
    private SomeController controller;

    @Test
    void foo() throws Exception {

        mockmvc customMvc = standalonesetup(resource).setMessageConverters(new MappingJackson2HttpMessageConverter()).build();

       
        customMvc.perform(get("/some-path"))
            .andExpect(status().isOk())
            .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE));
    }
}

如果我使用普通的 mockmvc 而不是 customMvc ,则会出现以下异常,因为未注册 MappingJackson2HttpMessageConverter

Type = org.springframework.http.converter.HttpMessageNotWritableException

如果我使用 customMvc ,则测试为绿色。因此,我需要以某种方式将 MappingJackson2HttpMessageConverter 应用于 mockmvc ,但我不知道如何。

请告知

解决方法

基于https://github.com/spring-projects/spring-boot/issues/24000的正确解决方案是同时使用@AutoConfigureMockMvc和@AutoConfigureWebMvc

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@AutoConfigureWebMvc
@AutoConfigureMockMvc
@WithMockUser
public @interface MockMvcWithUser {
}

@SpringBootTest(classes = SomeController.class)
@MockMvcWithUser 
class SomeControllerTestIT { 
  ... // same test logic goes here
}