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

Spring 4 RestTestClient无法发送Multipart数据问题求助

问题分析与解决方案

问题原因

你遇到的MissingServletRequestPartException是因为RestTestClient直接传入MultiValueMap作为请求体时,没有正确生成符合multipart/form-data规范的请求格式。虽然请求体已写入,但缺少multipart请求必需的边界标识、每个part的头部信息,导致服务器无法识别value这个请求part。而Postman会自动处理这些细节,所以请求正常。

解决方案

有两种可靠的方式修复这个测试问题:

方案1:使用multipart()方法逐个添加请求part

RestTestClient专门提供了multipart()方法来构建multipart请求,能自动处理格式规范:

@Test
void sendMultiPart() {
    String value = "test";

    client.post()
            .uri("/api/multipart")
            .multipart("value", value) // 直接添加单个part
            .exchangeSuccessfully()
            .expectBody().json("{\"value\": \"%s\"}".formatted(value));
}

方案2:使用BodyInserters.fromMultipartData()构建请求体

如果你需要复用MultiValueMap,可以通过BodyInserters来包装,确保请求格式正确:

import org.springframework.web.reactive.function.BodyInserters;

@Test
void sendMultiPart() {
    String value = "test";
    
    MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
    body.add("value", value);

    client.post()
            .uri("/api/multipart")
            .contentType(MediaType.MULTIPART_FORM_DATA)
            .body(BodyInserters.fromMultipartData(body)) // 用BodyInserters包装
            .exchangeSuccessfully()
            .expectBody().json("{\"value\": \"%s\"}".formatted(value));
}

验证说明

修改后的测试代码会正确生成包含边界符、part头部的multipart/form-data请求,服务器端就能正常解析出value参数,不会再抛出缺失请求part的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 10:22:18