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

Spring Boot整合MySQL时GET正常POST请求报错如何解决

问题根因

报错java.sql.SQLIntegrityConstraintViolationException: Column 'booking_name' cannot be null的直接原因是:执行插入操作时,实体类Bookings的bookingName属性值为null,违反了数据库表booking_name字段的非空约束。
本质是参数绑定失败:你的POST接口方法没有给入参添加@RequestBody注解,Spring MVC默认会按照表单参数、URL查询参数的规则解析入参,不会主动解析请求体中的JSON数据。你发起POST请求时通常是将预订数据放在JSON请求体中传输,因此所有字段都没有完成绑定,其中字符串类型的bookingName默认值为null,最终触发数据库报错。
GET请求可以正常响应是因为查询流程是JPA从数据库读取数据,自动将下划线命名的表字段映射到驼峰命名的实体属性,不存在参数绑定的问题。

修复方案
  • 第一步:修改BookingsController类中的POST接口方法,给Bookings入参添加@RequestBody注解,同时补上对应类的导入,修改后代码如下:
// 新增导入
import org.springframework.web.bind.annotation.RequestBody;

@PostMapping("/bookings")
public void addBookings(@RequestBody Bookings bookings) {
    bs.addBookings(bookings);
}
  • 第二步:确认项目已正常引入spring-boot-starter-web依赖,该依赖默认集成Jackson序列化组件,会自动完成JSON字段和实体驼峰属性的绑定,不需要额外添加字段映射配置。
  • 第三步:发起POST请求时设置请求头Content-Type: application/json,请求体传递符合实体结构的JSON数据,示例如下:
{
    "bookingId": 1,
    "bookingName": "测试预订人",
    "bookingPid": 2001,
    "passengers": 3,
    "cost": 960
}
验证方式

修改完成后重启项目,重新发起POST请求即可正常完成数据插入,不会再出现booking_name为空的报错。

内容的提问来源于stack exchange,提问作者vishvak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:31:08