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
相关产品推荐
相关产品推荐

