You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:45:25