Spring Boot @PostMapping请求报400 Bad Request问题求助
解决@PostMapping POST请求400 Bad Request问题
针对你遇到的仅/createstore接口返回400 Bad Request的问题,以下是最常见的排查和解决方向:
1. 检查请求JSON与Store实体类的兼容性
400错误绝大多数是JSON请求体无法正确反序列化为Store对象导致的,常见场景:
- JSON字段名与实体类属性名不匹配(Spring默认按驼峰规则匹配,比如实体类
storeName对应JSON的storeName,如果写成storename或store_name会匹配失败) - 实体类存在必填字段(如加了
@NotNull/@NotEmpty注解),但JSON未传入或传入空值 - 字段类型不匹配,比如实体类是
Integer类型的storeId,JSON传入字符串"123a"
解决方法:
- 对照
Store类的属性,逐行检查JSON的键名、类型、必填项 - 若字段名有差异,在实体类属性上添加
@JsonProperty指定JSON键名,示例:@JsonProperty("store_name") private String storeName;
2. 确认Postman请求头设置正确
你的接口明确指定了consumes = MediaType.APPLICATION_JSON_VALUE,必须在Postman的Headers标签中添加Content-Type: application/json,否则Spring无法识别请求体格式,直接返回400。
3. 检查Store类是否存在无参构造函数
Spring反序列化JSON时,需要依赖无参构造函数实例化对象。如果你的Store类只定义了带参构造,未编写无参构造,会导致反序列化失败触发400。
解决方法:在Store类中添加无参构造:
public Store() { // 空实现即可 }
4. 验证请求体JSON的语法正确性
JSON语法错误也会导致解析失败,比如:
- 使用中文引号、单引号(必须用英文双引号)
- 遗漏/多余逗号、括号不匹配
- 字符串未闭合
错误示例:
{ storeName: "家乐福", // 缺少英文双引号 address: "XX路", // 中文逗号 }
正确示例:
{ "storeName": "家乐福", "address": "XX路" }
5. 添加全局异常处理器获取详细错误信息
当前代码无法返回具体的错误原因,建议添加全局异常处理器,捕获JSON解析相关异常,返回详细错误内容,方便定位问题:
@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(HttpMessageNotReadableException.class) public ResponseEntity<String> handleJsonParseException(HttpMessageNotReadableException e) { return new ResponseEntity<>("JSON解析失败:" + e.getMessage(), HttpStatus.BAD_REQUEST); } }
内容的提问来源于stack exchange,提问作者Ernesto Orozco
相关产品推荐
相关产品推荐

