Текущий стек технологий:
- Spring Boot 2.3.2
- JUnit5
- Mock Mvc
В моем приложении .properties, я включил:
server.servlet.encoding.force=true
Таким образом, ко всем ответам добавляется ";charset=UTF-8"
. Это работает должным образом в Swagger, Fiddler, реальном мире.
Я построил свой модульный тест как:
String result = mockMvc().perform(get("/customers")
.accept(MediaType.APPLICATION_xxx)
.header(HttpHeaders.AUTHORIZATION, authorization()))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_xxx_UTF8))
.andReturn()
.getResponse()
.getContentAsString();
List<CustomerDto> customers = this.objectMapper.readValue(result, new TypeReference<List<CustomerDto>>(){});
Обратите внимание, что я установил ожидаемый contentType как MediaType.APPLICATION_xxx_UTF8
, что равно MediaType.APPLICATION_xxx
с добавленным ";charset=UTF-8"
.
Однако ответ возвращается как MediaType.APPLICATION_xxx
.
Я новичок в junit и имитирую mvc, но я предполагаю, что mvc на самом деле не отправляет HTTP-запрос? Значит, он не проходит через сервлет для добавления кодировки?
Как я могу заставить его добавить кодировку? Я знаю, что могу просто принять тип, отличный от UTF8, но я хочу проверить, что получит реальный мир.
EDIT: Mock mvc создается как:
public ControllerTestsBase(WebApplicationContext webApplicationContext,
FilterChainProxy springSecurityFilterChain) {
this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
.addFilter(springSecurityFilterChain)
.build();
}