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

使用RestTemplate调用文件上传API时遇400错误,求解决方案

解决RestTemplate调用PUT Multipart API报400的问题

以下是针对性的排查和修复步骤:

  • 不要手动设置Content-Type头
    手动指定MediaType.MULTIPART_FORM_DATA会丢失自动生成的boundary分隔符,服务端无法正确解析多部分请求。直接移除手动设置的Content-Type,RestTemplate会自动生成符合规范的请求头。

  • 为ByteArrayResource设置文件名
    多数服务端依赖Multipart文件的文件名信息完成解析,创建ByteArrayResource时必须指定文件名:

    ByteArrayResource resource = new ByteArrayResource(file.getBytes()) {
        @Override
        public String getFilename() {
            return file.getOriginalFilename(); // 传入实际文件名
        }
    };
    
  • 确保参数名与接口完全匹配
    检查MultiValueMap中使用的参数键,是否和Postman调用时的参数名完全一致(比如Postman里的参数是不是"image"),大小写、拼写都不能出错。

  • 配置正确的RestTemplate转换器
    默认RestTemplate的转换器配置可能存在问题,手动添加Multipart相关转换器:

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getMessageConverters().add(new MultipartFormHttpMessageConverter());
    restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
    
  • 对比请求头差异
    用日志工具打印代码生成的完整请求头,和Postman的请求头逐一对比,重点核对:

    • Authorization头是否正确携带Bearer Token
    • 是否存在多余的请求头(比如Accept头是否和Postman一致)

完整示例代码

// 构建请求体
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("image", new ByteArrayResource(file.getBytes()) {
    @Override
    public String getFilename() {
        return file.getOriginalFilename();
    }
});

// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth("你的Token"); // 此方法更规范可靠

// 构建请求实体
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);

// 初始化并配置RestTemplate
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MultipartFormHttpMessageConverter());
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

// 发起PUT请求
ResponseEntity<String> response = restTemplate.exchange(
        "目标API地址",
        HttpMethod.PUT,
        requestEntity,
        String.class
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:32:07