Postman选form-data导致request.getParameter()返回null,因其Content-Type为multipart/form-data,而getParameter()仅支持application/x-www-form-urlencoded;应改用x-www-form-urlencoded选项。

Postman里选错body类型导致request.getParameter返回null
最常见原因是Postman的Body选项选成了form-data,它会把Content-Type设为multipart/form-data,而request.getParameter()只认application/x-www-form-urlencoded编码的表单数据。
解决方法很简单:
- 在Postman的Body标签页,**不要点第一个
form-data按钮** - 改选第二个
urlencoded(即x-www-form-urlencoded) - 填入键值对后,Postman会自动设置
Content-Type: application/x-www-form-urlencoded;charset=utf-8 - 此时
request.getParameter("xxx")就能正常取到值了
注意:如果接口同时要传文件,那必须用form-data,但后端就不能再依赖getParameter(),得换用MultipartHttpServletRequest或@RequestPart。
Spring Boot里误配dispatcherServlet Bean导致整个请求链路失效
Spring Boot 1.5.x项目中,如果启动类里手动注册了名字为dispatcherServlet的ServletRegistrationBean,会覆盖Spring MVC默认的DispatcherServlet实例,导致所有@PostMapping、@RequestParam等注解完全不生效——连日志都打不出来,参数自然收不到。
典型错误代码长这样:
@Bean
public ServletRegistrationBean<DispatcherServlet> dispatcherServlet() {
return new ServletRegistrationBean<>(new DispatcherServlet(), "/api/*");
}
修复方式只有两个有效选择:
- 把Bean名改成别的,比如
restDispatcherServlet,避免命名冲突 - 直接删掉这个Bean定义——除非你真在集成CXF或自定义Servlet容器,否则没必要手动注册
这个坑不会报错,只会静默失败,排查时建议先临时注释掉所有自定义@Bean,确认是否恢复再逐个放开验证。
Postman Mac版是一款专为macOS设计的API开发与测试工具,凭借简洁的界面和强大的功能,深受开发者喜爱。它支持发送各种HTTP请求(GET、POST、PUT等),轻松管理接口集合、环境变量和模拟服务器。Mac用户可享受原生性能、快捷键优化及与系统无缝集成的体验,适用于接口调试、自动化测试和文档生成。无论是个人项目还是团队协作,Postman for Mac都能提升API开发效率,是ma
@RequestParam在multipart/form-data下为什么拿不到参数
@RequestParam默认只解析application/x-www-form-urlencoded和query string里的参数;一旦Postman或前端用了form-data(即multipart/form-data),Spring会走Multipart解析流程,@RequestParam就失效了。
对应关系很明确:
-
Content-Type: application/x-www-form-urlencoded→ 用@RequestParam或request.getParameter() -
Content-Type: multipart/form-data→ 必须用@RequestPart(支持文件+普通字段混传)或MultipartFile参数
示例:后端写成这样才对
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String handleUpload(
@RequestPart("file") MultipartFile file,
@RequestPart("desc") String desc) { ... }
如果还硬用@RequestParam,会直接400或参数为null,且无明显错误日志。
Spring Boot 1.5.x默认开启multipart但没配maxFileSize导致静默截断
Spring Boot 1.5.x默认spring.servlet.multipart.enabled=true,但没显式配置maxFileSize和maxRequestSize时,某些内嵌Tomcat版本会用极小的默认值(比如1MB),超限后请求体被截断,表单字段看起来“消失”了。
检查点:
- 看Postman响应状态码是不是
400或500,但没具体错误信息 - 在Controller入口加一行
log.info("content-length: {}", request.getContentLength()),对比你发的数据大小 - 在
application.yml里补全配置:
spring:
servlet:
multipart:
enabled: true
max-file-size: 10MB
max-request-size: 10MB
这个限制是全局的,哪怕你没传文件,只要Content-Type是multipart,就会触发校验。

















