我有下面的代码在那里,我试图从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的单个属性来实现的。您实际上是试图将单个列映射到多个不工作的属性。现在有两种方法可以做到这一点:
- 写自己的
RowProcessor
- 重写查询以返回多列。
在这种情况下,我倾向于第二个解决方案,因为它很简单,因为postgres已经为其json字段类型内置了这个功能。
你的查询可以像这样:
String query = "SELECT emp_payload->'empName' AS empName, emp_payload->'empID' AS empID FROM EmpDetails";
(AS ...
可能不是必要的,但我不知道psql如何生成提取json值的列名)。
如果你直接在postgres中执行这个查询,你会得到一个列名为empName
和empID
的结果集,这正是BeanProcessor
(BeanListHandler
的默认处理器)所期望的。