You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

上传MultipartFile时出现No HttpMessageConverter错误的求助

问题原因与解决方案

核心问题

你代码里存在嵌套包装请求体的错误:uploadFile方法中把MultiValueMap包装成了HttpEntity,然后doPostRequest又把这个HttpEntity作为body再次包装成新的HttpEntity,导致RestTemplate收到的请求体是HttpEntity<HttpEntity<MultiValueMap>>,它没有对应的转换器处理这种嵌套结构,因此抛出No HttpMessageConverter错误。

修复步骤

1. 修改uploadFile方法,直接传递MultiValueMap

无需把MultiValueMap包装成HttpEntity,直接将其作为请求body传入doPostRequest:

public String uploadFile(MultipartFile file) {
    MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
    body.add("file", file); // 建议用固定参数名(如"file"),和后端接口参数名保持一致,避免用file.getName()导致参数名不匹配
    HttpHeaders httpHeaders = new HttpHeaders();
    return super.httpClient.doPostRequest(httpHeaders, myEndpoint, body, String.class, MediaType.MULTIPART_FORM_DATA);
}

2. 调整doPostRequest方法的参数与逻辑

确保方法接收的是请求body而非HttpEntity,再正确创建请求实体:

// 泛型B代表请求body类型,此处对应MultiValueMap<String, Object>
public <T, B> T doPostRequest(HttpHeaders httpHeaders, String url, B body, Class<T> responseType, MediaType contentType) {
    httpHeaders.setContentType(contentType);
    HttpEntity<B> entity = new HttpEntity<>(body, httpHeaders);
    ResponseEntity<T> result = restTemplate.exchange(url, HttpMethod.POST, entity, responseType);
    return result.getBody();
}

3. 确认RestTemplate转换器配置(可选)

Spring Boot项目默认会自动配置FormHttpMessageConverter(支持multipart请求),无需额外操作。如果是手动创建RestTemplate,需确保添加该转换器:

@Bean
public RestTemplate restTemplate() {
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getMessageConverters().add(new FormHttpMessageConverter());
    return restTemplate;
}

额外注意点

  • 上传文件的参数名必须和后端接口的参数名完全匹配(比如后端用@RequestParam("file") MultipartFile file,这里就用body.add("file", file)),不要用file.getName(),它返回的是客户端上传的文件名,并非接口参数名。
  • 后端接口需正确声明支持multipart请求,比如添加@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)注解。

内容的提问来源于stack exchange,提问作者noob234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:55:19