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

Postgres数据库JSON字段无法映射到POJO类返回全为null如何解决

问题原因

Apache DbUtils 提供的BeanListHandler默认只会将SQL查询返回的结果集列名与POJO的字段名一一匹配赋值,你当前的查询仅返回emp_payload这一个JSON类型的列,而EmployeePayload类中没有名为emp_payload的对应字段,也不会自动解析JSON内容映射到类的属性上,因此最终得到的所有字段值都是null。

解决方案

方案1:修改SQL直接展开JSON字段(最简便)

利用PostgreSQL自带的JSON运算符->>直接把JSON内部的字段展开为结果集列,别名和POJO字段名保持一致,即可直接用原生BeanListHandler完成映射:

// SQL中直接提取JSON内部字段,别名与POJO字段名匹配
String query = "SELECT emp_payload->>'empName' AS empName, emp_payload->>'empID' AS empID FROM EmpDetails";
ResultSetHandler<List<EmployeePayload>> employeePayload = new BeanListHandler<EmployeePayload>(EmployeePayload.class);
List<EmployeePayload> resultList = runner.query(dbConnection, query, employeePayload);

方案2:自定义ResultSetHandler实现JSON解析

如果需要保留原查询逻辑,自己实现结果集处理逻辑,用JSON解析工具(比如Jackson)将取出的JSON字符串转换为对应的POJO:

// 提前初始化Jackson的ObjectMapper,全局复用即可
ObjectMapper objectMapper = new ObjectMapper();

String query = "SELECT emp_payload FROM EmpDetails";
// 自定义ResultSetHandler
ResultSetHandler<List<EmployeePayload>> handler = new ResultSetHandler<List<EmployeePayload>>() {
    @Override
    public List<EmployeePayload> handle(ResultSet rs) throws SQLException {
        List<EmployeePayload> resultList = new ArrayList<>();
        while (rs.next()) {
            // 取出JSON列的字符串内容
            String jsonContent = rs.getString("emp_payload");
            try {
                // 解析为EmployeePayload对象
                EmployeePayload payload = objectMapper.readValue(jsonContent, EmployeePayload.class);
                resultList.add(payload);
            } catch (JsonProcessingException e) {
                // 按需处理解析异常
                throw new SQLException("JSON解析失败", e);
            }
        }
        return resultList;
    }
};

List<EmployeePayload> resultList = runner.query(dbConnection, query, handler);

如果用方案2需要确保项目中引入了Jackson的相关依赖,且EmployeePayload类的getter、setter方法正常可用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:24:00