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

Character encoding MockMvc:将MockHttpServletResponse的默认字符编码从ISO-8859-1更改为UTF-8,character-encoding,mockmvc,Character Encoding,Mockmvc,在编写Spring集成测试时,我遇到了一个问题,MockMvc忽略了我的 .accept(MediaType.APPLICATION_JSON_UTF8) 设置,并返回外观不好的ISO-8859-1 umlaut 将MockMvc的默认编码设置为UTF-8的最佳方法是什么?我认为在spring boot中,以下设置会有所帮助 spring.http.encoding.force=true 在我的例子中,设置有点特殊,它没有 对我的设置有效的方法是在MockMvc设置中添加一个过滤器 @Be

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

.accept(MediaType.APPLICATION_JSON_UTF8) 
设置,并返回外观不好的ISO-8859-1 umlaut


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

我认为在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
,也就是说,使用
spring.http.encoding.xxx
只在使用
@springbootest
时,它缺少
字符编码过滤器
,但在
@WebMvcTest
时不起作用。后者仅在添加
@Import(HttpEncodingAutoConfiguration.class)
时才起作用。这些都不适合我。MockMvc可能会非常令人沮丧,因为这样的事情。