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

Retrofit上传Multipart文件携带RequestParam报400是哪端问题

问题定性

这个问题属于客户端问题。HTTP 400 Bad Request错误的根因是客户端发送的请求参数不符合服务端定义的接收规则,导致服务端无法解析到必填的email参数。

具体原因

  • 服务端Spring Boot接口的email参数通过@RequestParam声明,属于必填参数,缺失会直接返回400错误
  • 客户端Retrofit接口使用@Part注解传递字符串类型的email参数时,若没有提前配置ScalarsConverterFactory,Retrofit无法直接将String类型序列化为Multipart请求的普通字段内容,最终导致email参数没有被正确发出,服务端校验不通过。

修复方案

方案1:将email作为查询参数传递(最简单)

修改Retrofit服务接口,将@Part改为@Query,让email作为URL查询参数传递,服务端无需做任何改动:

@POST("uploadPhoto")
@Multipart
suspend fun uploadPhoto(@Query("email") email: String, @Part img: MultipartBody.Part): String

方案2:将email转为RequestBody类型传递

如果需要把email放在Multipart请求体中传递,可以把参数类型改为RequestBody:

  1. 先修改Retrofit接口定义:
@POST("uploadPhoto")
@Multipart
suspend fun uploadPhoto(@Part("email") email: RequestBody, @Part img: MultipartBody.Part): String
  1. 调用接口时将字符串转为text/plain类型的RequestBody:
val email = "bekjan.omirzak98@gmail.com"
val emailBody = RequestBody.create(MediaType.parse("text/plain"), email)
viewModel.uploadPhoto(emailBody, fileToUpload)

内容的提问来源于stack exchange,提问作者разия Утегенова

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:15:03