Spring Boot @PostMapping接口Postman测试报400 Bad Request问题
Spring Boot Post接口返回400 Bad Request排查方案
400错误的核心原因是带@RequestBody注解的参数无法被Spring内置的Jackson序列化器正确转换为Student实体对象,按以下优先级逐一排查修复即可:
排查点1:Postman请求配置错误
这是初学者遇到该问题的最高频原因:
- 确认请求方法选择为
POST,接口访问路径拼写正确 - 确认请求头中
Content-Type值为application/json,不要使用form-data、x-www-form-urlencoded、text/plain等格式传参 - 确认请求体选择
raw类型,下拉选项切换为JSON,传入的JSON结构需和实体类可接收字段匹配,参考正确传参示例:
{ "name": "李明", "email": "liming@school.edu", "dob": "2001-09-01" }
注意:id是数据库自增主键不需要传,age字段标注了
@Transient是根据dob计算的临时字段,也不需要在请求中传入。
排查点2:Student实体类缺少Jackson反序列化必要的方法
查看给出的实体类代码,目前只定义了无参构造、带参构造和toString方法,缺少所有属性的getter/setter方法:Jackson默认需要通过无参构造创建对象实例,再通过setter方法为属性赋值,缺少setter会直接导致反序列化失败。
修复方案二选一即可:
- 手动为id、name、email、dob、age属性添加对应的get、set方法
- 引入Lombok依赖,在Student类上添加
@Data注解,自动编译生成getter/setter、toString等通用方法,简化代码。
排查点3:日期字段格式不匹配
实体类中dob字段为LocalDate类型,默认只支持解析yyyy-MM-dd格式的ISO标准日期字符串,如果传参带时分秒、或者使用了MM/dd/yyyy等其他格式,会触发反序列化报错。
修复方案:
- 传参时严格使用
yyyy-MM-dd格式传日期字符串 - 若需要支持其他日期格式,在dob字段上添加格式指定注解:
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private LocalDate dob;
排查点4:传参类型不匹配
检查传入的JSON字段值类型和实体类属性类型是否一致,比如给数字类型的id/age传字符串、给字符串类型的name/email传对象/数组,都会触发400错误,对照修正即可。
内容的提问来源于stack exchange,提问作者Muhamad Jabaly
相关产品推荐
相关产品推荐

