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

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插件后,开启注解处理器支持

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"
}
验证步骤
  1. 重启应用,发送原POST请求
  2. 查看数据库是否存入有效数据
  3. 检查响应是否返回包含完整属性的Department对象:
{
    "departmentId": 53,
    "departmentName": "HR",
    "departmentAddress": "New York",
    "departmentCode": "HR123"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:12:40