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

使用Spring JPA Repository保存至MySQL时Name和Price字段为null的问题

问题排查与解决方案

1. 检查请求JSON字段名匹配

这是最常见的触发原因:请确认你发送POST/PUT请求时,JSON的字段名和Course实体类的属性名完全一致(大小写敏感)。
正确的请求体示例:

{
  "name": "Java入门教程",
  "price": 89.9
}

如果请求里写的是Name、Price或其他拼写不一致的字段,Spring MVC无法将请求参数绑定到实体类属性,会直接导致name和price为null。

2. 确认Lombok的@Data注解生效

尽管你使用了@Data,但要确保项目已正确引入Lombok依赖,且IDE安装了Lombok插件:
Maven依赖配置示例:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

如果Lombok未生效,实体类不会自动生成setter方法,Spring无法为属性赋值,最终插入数据库时字段为null。可以通过查看编译后的class文件,确认是否生成了getter/setter方法。

3. 检查数据库表与实体类的字段映射

查看COURSE_DTLS表的实际字段名:

  • 若表字段是NAME、PRICE(大写),MySQL默认配置(lower_case_table_names=1)会自动转小写,映射不会有问题;但如果数据库配置区分大小写,需要显式指定字段映射:
@Column(name = "NAME")
private String name;

@Column(name = "PRICE")
private Double price;

4. 验证请求的Content-Type

发送请求时必须设置Content-Type: application/json,否则@RequestBody无法正确解析JSON内容,导致属性赋值失败。比如用Postman测试时,要在请求头里添加该配置,前端请求工具(如Axios)也要对应设置请求头。

5. 调试确认实体类属性值

可以在CourseServiceImpl的upsert方法中添加打印或断点,查看传入的Course对象属性值:

@Override
public String upsert(Course course) {
    // 调试打印
    System.out.println("课程名称: " + course.getName());
    System.out.println("课程价格: " + course.getPrice());
    courseRepo.save(course);
    return "success";
}

如果打印结果为null,说明问题出在请求参数绑定阶段;如果有值,则是JPA映射或数据库配置的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:44:58