Postman中使用form-data(multipart/form-data)时request.getParameter无法获取参数,因该格式需用MultipartHttpServletRequest或文件上传组件解析,而getParameter仅支持application/x-www-form-urlencoded格式。

Postman里填了参数,后端request.getParameter拿不到
这是最典型的「表单提交错配」问题:Postman选了form-data,但后端用的是传统Servlet的getParameter方式读取,而form-data对应的是multipart/form-data,此时getParameter直接失效。
根本原因在于:form-data会把整个请求体拆成多段(含boundary),Servlet容器默认不解析这种格式的普通字段;只有x-www-form-urlencoded才走标准表单解析流程。
- 立刻检查Postman Body标签页——选的是
form-data还是x-www-form-urlencoded?后者才是getParameter能识别的格式 - 如果必须用
form-data(比如要传文件),后端就得改用MultipartHttpServletRequest或@RequestParam+MultipartFile来接 - Spring Boot项目中,若同时支持两种方式,建议统一用
@RequestBody接收JSON,避免容器解析歧义
Postman能通,前端调不通:@RequestBody没加
现象是Postman发JSON能拿到参数,前端AJAX却始终收不到——大概率是后端Controller方法漏了@RequestBody注解。
Spring MVC默认用@RequestParam或Servlet API去解析application/x-www-form-urlencoded,但对application/json完全不处理,除非显式声明@RequestBody告诉框架:“这段JSON我要反序列化成对象”。
- 检查Controller方法签名:是否在参数前写了
@RequestBody?没写就等于“忽略Body里的JSON” - 确认前端
Content-Type确实是application/json,且发送的是合法JSON字符串(不是JSON字符串嵌套在字符串里) - 如果参数是Map或简单类型(如
String),@RequestBody仍需存在,否则Spring不会触发JSON反序列化
Query Params和Body混用导致参数丢失
Postman的Params和Body是两套独立机制,不能互相替代。常见错误是:GET请求在Body里填数据,或者POST请求把关键参数塞进URL Query里却忘了后端没读。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
本质区别在于传输位置——Query在URL上(可见、有长度限制),Body在请求体里(不可见、容量大)。后端框架按约定只从指定位置取值。
- GET请求严禁使用Body传参,HTTP规范不支持,多数服务器直接丢弃
- POST/PUT请求中,Query Params和Body可共存,但后端代码必须分别用
@RequestParam和@RequestBody(或getParameter+getInputStream)去取 - Postman里误把参数拖到Params标签页,实际想走Body,结果URL变长还暴露敏感信息
Content-Type不匹配导致整个Body被忽略
后端框架靠Content-Type头决定用哪个解析器。填错一个字母,比如application/json写成application/jason,Spring就当普通流处理,@RequestBody绑定失败,日志里可能只报“JSON parse error”却不提头错了。
尤其注意form-data和x-www-form-urlencoded的Content-Type完全不同,前者带boundary,后者就是纯键值对。
- Postman自动设置
Content-Type,但手动切换Body类型时,务必确认Headers里没被覆盖(比如自己加了静态Content-Type头) - 用
raw模式发JSON时,必须手动设Content-Type: application/json,否则默认是text/plain - Spring Boot调试时,打开
logging.level.org.springframework.web=DEBUG,看日志里是否打印“Read json from body”或“Skipped parsing”
真正卡住人的从来不是参数没填,而是参数填到了框架根本不看的地方。每次遇到“服务端收不到”,先盯死三点:Content-Type是否准确、Body类型是否匹配后端预期、注解是否完整——其他都是干扰项。










