无法将JSON字段从postgres DB映射到POJO类



我有下面的代码在那里,我试图从postgres DB只获得1列(JSON类型),并将其映射到POJO类。但是,在结果中,我得到正确的计数,但只有空值,即使数据存在。任何帮助/建议都是感激的。

POJO类:

@JsonIgnoreProperties(ignoreUnknown = true)
public class EmployeePayload {
private String empName;
private String empID;
//getters and setters
}

查询执行代码::

String query = "SELECT emp_payload FROM EmpDetails";
ResultSetHandler<List<EmployeePayload>> employeePayload = new BeanListHandler<EmployeePayload>(EmployeePayload.class);
List<EmployeePayload> resultList = runner.query(dbConnection, query, employeePayload);
log.info(":: resultList is :: " + resultList);

Data in DB::

"{"empName":"james","empID":"008";"}","{"empName":"bond","empID":"007";"}">

Result in Log::

resultList is:: [EmployeePayload{empName='null', empID='null'}, EmployeePayload{empName='null', empID='null'}]

BeanListHandler来自apache的dbutils (docs)

通过查看docs/source,它是通过将单个列映射到Bean的单个属性来实现的。您实际上是试图将单个列映射到多个不工作的属性。现在有两种方法可以做到这一点:

  1. 写自己的RowProcessor
  2. 重写查询以返回多列。

在这种情况下,我倾向于第二个解决方案,因为它很简单,因为postgres已经为其json字段类型内置了这个功能。

你的查询可以像这样:

String query = "SELECT emp_payload->'empName' AS empName, emp_payload->'empID' AS empID FROM EmpDetails";

(AS ...可能不是必要的,但我不知道psql如何生成提取json值的列名)。

如果你直接在postgres中执行这个查询,你会得到一个列名为empNameempID的结果集,这正是BeanProcessor(BeanListHandler的默认处理器)所期望的。

最新更新