MockMvc:将 MockHttpServletResponse 的默认字符编码从 ISO-8859-1 更改为 UTF-8

MockMvc: changing default character encoding of MockHttpServletResponse from ISO-8859-1 to UTF-8

在编写 Spring 集成测试时,我遇到了 MockMvc 忽略我的问题

.accept(MediaType.APPLICATION_JSON_UTF8) 

设置,并返回了 ISO-8859-1 和难看的变音符号。

将 MockMvc 的默认编码设置为 UTF-8 的最佳方法是什么?

我认为在 spring 启动时以下设置会有所帮助。

spring.http.encoding.force=true

在我的例子中,设置有点特殊,它没有

对我的设置有效的是向 MockMvc 设置添加过滤器。

@Before
  public void setUp() {
    mockMvc = MockMvcBuilders
        .webAppContextSetup(webApplicationContext)
        .addFilter((request, response, chain) -> {
          response.setCharacterEncoding("UTF-8"); // this is crucial
          chain.doFilter(request, response);
        }, "/*")
        .build();
  }

希望它对某人有所帮助并节省一些时间的尝试和错误。

这对我有用:

server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true

我从这个 SO 问题中得到了灵感:SpringBoot response charset errors

这对我有用(Spring Framework 5.3.18):

MockMvcBuilders.defaultResponseCharacterEncoding(StandardCharsets.UTF_8)

例如:

MockMvc mockMvc = MockMvcBuilders
                   .standaloneSetup(controller)
                   .defaultResponseCharacterEncoding(StandardCharsets.UTF_8)
                 .build();