Spring Boot整合PostgreSQL数据无法存入数据库问题求助
问题诊断
你遇到的核心问题是JSON请求数据无法正确绑定到Department实体类,导致传入的对象属性全为null。因此调用save方法后,数据库仅生成自增的department_id,其余字段为空;同时由于实体类没有有效getter方法(或Lombok未生效),返回的对象序列化后是空JSON {}。
解决方案
1. 确认Lombok依赖与IDE支持
Lombok的@Getter/@Setter注解如果未生效,会导致实体类没有getter/setter方法,Jackson无法完成JSON与实体类的序列化/反序列化:
- Maven依赖检查:确保pom.xml中包含Lombok依赖(Gradle同理):
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
- IDE注解处理器开启:
- IDEA:打开
Settings > Build, Execution, Deployment > Compiler > Annotation Processors,勾选Enable annotation processing - Eclipse:安装Lombok插件后,开启注解处理器支持
- IDEA:打开
2. 手动添加Getter/Setter测试(排除Lombok问题)
暂时去掉Lombok注解,手动编写getter/setter方法,验证问题是否解决:
public class Department { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer departmentId; private String departmentName; private String departmentAddress; private String departmentCode; // 手动添加getter和setter public Integer getDepartmentId() { return departmentId; } public void setDepartmentId(Integer departmentId) { this.departmentId = departmentId; } public String getDepartmentName() { return departmentName; } public void setDepartmentName(String departmentName) { this.departmentName = departmentName; } public String getDepartmentAddress() { return departmentAddress; } public void setDepartmentAddress(String departmentAddress) { this.departmentAddress = departmentAddress; } public String getDepartmentCode() { return departmentCode; } public void setDepartmentCode(String departmentCode) { this.departmentCode = departmentCode; } }
如果此时请求能正常存入数据,说明问题出在Lombok未生效。
3. 检查请求头Content-Type
确保POST请求的Content-Type为application/json,否则@RequestBody无法正确解析JSON数据。使用curl测试的示例命令:
curl -X POST -H "Content-Type: application/json" -d '{"departmentName": "HR", "departmentAddress": "New York", "departmentCode": "HR123"}' http://localhost:8080/save
4. 验证Jackson序列化配置
Spring Boot默认使用Jackson处理JSON,若自定义了属性命名策略(如蛇形命名),会导致字段映射失败。检查application.properties中是否存在以下配置:
spring.jackson.property-naming-strategy=SNAKE_CASE
如果有,要么删除该配置(默认驼峰匹配),要么将请求JSON改为蛇形命名:
{ "department_name": "HR", "department_address": "New York", "department_code": "HR123" }
验证步骤
- 重启应用,发送原POST请求
- 查看数据库是否存入有效数据
- 检查响应是否返回包含完整属性的Department对象:
{ "departmentId": 53, "departmentName": "HR", "departmentAddress": "New York", "departmentCode": "HR123" }
内容的提问来源于stack exchange,提问作者Ripan Baidya
相关产品推荐
相关产品推荐

