415错误源于服务器拒绝JSON请求,主因是Content-Type头未设为application/json、Body模式未选raw+JSON、后端方法未用@RequestBody注解或DTO结构不匹配。需手动设置Header、正确选择Body模式、封装DTO并检查Jackson配置。

415 错误本质是服务器拒绝处理你发的 JSON,不是它“看不懂”,而是它“不认这个格式”——Content-Type 头没对、Body 模式没选对、或后端方法签名根本没打算接 JSON。
Postman 的 Content-Type 头必须手动加,不能只靠 Body 选 JSON
很多人以为在 Body → raw → JSON 下输入数据,Postman 就会自动带上 Content-Type: application/json。事实并非如此:某些版本(尤其是旧版或插件版 Tabbed Postman)压根不自动加;有些环境还会残留上一次请求的 Content-Type: text/plain,导致冲突。
- 务必切换到 Headers 标签页,手动添加一行:
Content-Type→application/json - 删掉所有其他
Content-Type行(比如text/plain或application/x-www-form-urlencoded),避免覆盖 - 注意空格:写成
Content-Type: application/json,不要写成Content-Type:application/json(冒号后缺空格曾导致某次调用失败)
Body 必须选 raw + JSON,不能选 Text 或 Form-Data
Postman 的 Body 类型决定它如何序列化和发送数据。选错模式,哪怕头对了,也会触发 415。
-
raw模式下再点右侧下拉框选JSON:此时 Postman 才会以 UTF-8 编码发送纯文本 JSON,并配合Content-Type: application/json - 如果选了
Text,即使内容是 JSON,Postman 会发Content-Type: text/plain—— 这正是错误信息里常出现的text/plain;charset=UTF-8 -
form-data或x-www-form-urlencoded模式完全不适用@RequestBody接口,它们对应的是@RequestParam或@ModelAttribute
后端方法签名必须匹配 @RequestBody,且 DTO 要可反序列化
Spring Boot 中,@PostMapping 方法若带 @RequestBody,就要求整个请求体被 Jackson 解析为一个 Java 对象。常见踩坑点不是头不对,而是结构不合法。
- 不能写成:
public String handle(@RequestBody List——ids, @RequestBody String type) @RequestBody只能用一次,且只能绑定整个 JSON 对象 - 必须封装成 DTO 类,含无参构造器、标准 getter/setter,字段名与 JSON key 完全一致(区分大小写)
- 如果 JSON 是数组(如
[1,2,3]),后端参数得是@RequestBody List,但控制器方法仍需接收单一对象,不能拆成多个@RequestBody - 检查 Jackson 配置:比如
spring.jackson.deserialization.fail-on-unknown-properties=true时,多传了服务端 DTO 不定义的字段也会静默失败并返回 415
最容易被忽略的是:415 往往不是单点问题,而是头、Body 模式、DTO 结构、Jackson 配置四者中任意一环断裂的结果。调试时别只盯 Postman 界面右上角那个“Send”按钮,先打开 Network 面板看实际发出的请求头和原始 body 内容,再比对后端日志里报错的 exact Content-Type 值和反序列化异常堆栈。











