最佳答案
我有一个应用程序,它在 DynamoDB 中存储一些数据,使用 Jackson 将我的复杂对象封装成一个 JSON。
例如,我正在编组的对象可能如下所示:
private String aString;
private List<SomeObject> someObjectList;
有些对象可能看起来像这样:
private int anInteger;
private SomeOtherObject;
另一个对象可能是这样的:
private long aLong;
private float aFloat;
如果对象没有问题地进行编组,并以 JSON 字符串的形式存储在 DB 中,那么这样做很好。
当需要从 DynamoDB Jackson 检索数据时,Jackson 会自动检索 JSON 并将其转换回来... ... 除了‘ some ObjectList’作为 List<LinkedHashMap>
而不是 List<SomeObject>
返回!这是杰克逊的标准行为,这不是一个错误。
所以这就引出了一个问题。我的代码库认为它处理的是 List<SomeObject>
,但实际上它处理的是 List<LinkedHashMap>
!我的问题是如何让我的 LinkedHashMap 重新变成一个‘ Some Object’。显然,这是一个手工过程,但我的意思是,我甚至不能提取值。
如果我这样做:
for (LinkedHashMap lhm : someObjectList) {
// Convert the values back
}
我得到一个编译错误,它告诉我 some ObjectList 的类型是‘ Some Object’而不是 LinkedHashMap。
如果我这样做:
for (SomeObject lhm : someObjectList) {
// Convert the values back
}
我得到一个运行时错误,告诉我 LinkedHashMap 不能被强制转换为‘ Some Object’。