SpringBoot中Postman POST请求失败:RequestBody缺失问题排查
问题排查与解决方案
核心问题
你遇到的错误根源在于HTTP POST请求只能包含一个请求体(RequestBody),但你的Controller方法sendMoney声明了三个@RequestBody参数。Spring无法从单个请求体中解析出三个独立的参数,因此会抛出请求体缺失的错误。而CommandLineRunner是直接调用Java方法,不受HTTP协议限制,所以能正常执行。
解决方案步骤
1. 创建请求DTO类
封装所有请求参数到一个单独的DTO(数据传输对象)中,比如命名为SendMoneyRequest:
import lombok.Data; @Data // 用Lombok自动生成getter、setter、toString等方法,也可手动实现 public class SendMoneyRequest { private User sender; private User receiver; private double amount; }
2. 修改Controller层方法
将原来的三个@RequestBody参数替换为这个DTO作为唯一的请求体参数:
@PostMapping("/send") public ApiResponse<Transaction> sendMoney(@RequestBody SendMoneyRequest request) { return transactionService.sendMoney(request.getSender(), request.getReceiver(), request.getAmount()); }
3. 调整Postman请求体格式
在Postman中发送JSON格式的请求体,结构对应SendMoneyRequest:
{ "sender": { "firstName": "Olamide", "lastName": "Thompson", "email": "olamide@mail.com" }, "receiver": { "firstName": "Francis", "lastName": "Oladosu", "email": "francisola@gmail.com" }, "amount": 200 }
验证逻辑
修改完成后,重新启动项目,用Postman发送上述格式的POST请求,即可正常调用接口并完成交易存储。
内容的提问来源于stack exchange,提问作者shiz
相关产品推荐
相关产品推荐

