SpringBoot+JPA+Gradle+MySQL中@PostMapping保存空对象问题求助
问题分析与解决方案
嘿,我仔细看了你的代码和遇到的问题,马上就找到了根源——你的User实体类缺少了属性的getter和setter方法,这直接导致了两个核心问题:
为什么会出现这些异常?
- 保存时字段为null:当你用PostMan发送JSON请求时,Spring MVC的
@RequestBody需要通过setter方法来给User对象的name属性赋值。没有setter的话,name会一直保持默认的null,JPA保存到数据库时自然只有自增的id有值。 - 查询返回空对象列表:当JPA从数据库查询出
User数据后,Spring要把对象序列化成JSON返回给前端,这时候需要getter方法来读取属性值。没有getter的话,序列化后的JSON里就没有name字段,看起来就像是空对象。
解决方案
方法一:手动添加Getter和Setter
修改你的User实体类,给id和name都加上getter和setter方法:
package db.example.autodbconnect.entities; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; @Entity @Table public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column private String name; // Getter和Setter方法 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
方法二:用Lombok简化代码(推荐)
如果不想手动写大量重复的getter/setter,可以用Lombok的@Data注解自动生成这些方法,步骤如下:
- 在
build.gradle的dependencies中添加Lombok依赖:
implementation 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok'
- 修改
User实体类,加上@Data注解:
package db.example.autodbconnect.entities; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; import lombok.Data; @Entity @Table @Data public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column private String name; }
其他配置验证
我检查了你的Controller、Service、Repository、build.gradle和application.properties,所有配置都是正常的:
- PostMan的请求格式正确(JSON字段名和实体类属性名一致)
- JPA的
ddl-auto=update配置能正确生成表结构 - 依赖包也都配齐了,没有缺失情况
修改完实体类后,重启你的SpringBoot应用,再用PostMan测试创建和查询接口,就能正常保存和返回用户数据啦!
内容的提问来源于stack exchange,提问作者M Nouman
相关产品推荐
相关产品推荐

