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

6

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

.accept(MediaType.APPLICATION_JSON_UTF8) 

设置后返回ISO-8859-1编码,umlaut看起来不好。

如何将MockMvc的默认编码设置为UTF-8?

3个回答

9

我听说在 Spring Boot 中,以下设置将有所帮助。

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();
  }

希望这些能帮助到一些人,节省尝试和错误的时间。


我遇到了同样的问题,并注意到默认的MockMvc似乎没有遵守spring.http.encoding.force=true,即缺少CharacterEncodingFilter - elonderin
2
只有在使用@SpringBootTest时,才能使用spring.http.encoding.xxx。但是,在使用@WebMvcTest时,只有添加@Import(HttpEncodingAutoConfiguration.class)才能生效。 - elonderin
2
这些对我都没有用。MockMvc可以非常令人沮丧,因为出现了这样的问题。 - PlunkettBoy
你刚刚帮我避免了一场即将到来的编码地狱,非常感谢你。 - Celso Pereira Neto

2
这对我很有用(Spring Framework 5.3.18):
MockMvcBuilders.defaultResponseCharacterEncoding(StandardCharsets.UTF_8)

例如:

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

2
这对我有用:

这对我有用:

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

我从这个SO问题得到了灵感:SpringBoot响应字符集错误


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接