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

R.S*_*R.S 6 character-encoding mockmvc

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

.accept(MediaType.APPLICATION_JSON_UTF8) 
Run Code Online (Sandbox Code Playgroud)

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

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

R.S*_*R.S 10

我读到在春季启动中以下设置会有所帮助。

spring.http.encoding.force=true
Run Code Online (Sandbox Code Playgroud)

就我而言,设置有点特殊,但事实并非如此

对我的设置有用是向 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();
  }
Run Code Online (Sandbox Code Playgroud)

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

  • 使用`spring.http.encoding.xxx`仅在使用`@SpringBootTest`时有效,但不适用于`@WebMvcTest`。后者仅在添加“@Import(HttpEncodingAutoConfiguration.class)”时才有效 (2认同)
  • 这些对我来说都不起作用。由于类似的事情,MockMvc 可能会非常令人沮丧。 (2认同)