也许有点晚了,但我还是犯了同样的错误,在寻找解决方案时发现了这个问题。
在我的案例中,错误是我手动注册了
HttpMessageConverter
在我的测试中。
this.mockMvc = MockMvcBuilders
...
.setMessageConverters(myJsonHttpMessageConverter)
.build();
通过调试,我发现SpringMVC的内部逻辑是:
-
如果配置了转换器,请仅使用此转换器。
-
如果没有配置,请添加所有默认转换器。
这是相关的代码
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport
:
protected final List<HttpMessageConverter<?>> getMessageConverters() {
if (this.messageConverters == null) {
this.messageConverters = new ArrayList<>();
configureMessageConverters(this.messageConverters);
if (this.messageConverters.isEmpty()) {
addDefaultHttpMessageConverters(this.messageConverters);
}
extendMessageConverters(this.messageConverters);
}
return this.messageConverters;
}
为了解决这个问题,你可以
删除自定义转换器
所以所有的默认转换器都被使用,或者-如果你像我一样需要它的话-
添加
ByteArrayHttpMessageConverter
在测试设置中。
this.mockMvc = MockMvcBuilders
...
.setMessageConverters(myJsonHttpMessageConverter, new ByteArrayHttpMessageConverter())
.build();