将LinkedHashMap转换为复杂对象

我有一个应用程序,该应用程序使用Jackson将我的复杂对象编组为JSON,从而在DynamoDB中存储一些数据。

例如,我要编组的对象可能如下所示:

private String aString;

private List<SomeObject> someObjectList;

SomeObject可能看起来像这样:

private int anInteger;

private SomeOtherObject;

和SomeOtherObject可能看起来像这样:

private long aLong;

private float aFloat;

可以很好地将对象整理成问题并将其作为JSON字符串存储在数据库中。

当需要从DynamoDB检索数据时,Jackson会自动检索JSON并将其转换回…除了’someObjectList’返回为List<LinkedHashMap>not以外List<SomeObject>!这是杰克逊的标准行为,这并不是正在发生的错误。

所以现在这导致了一个问题。我的代码库认为它处理a,List<SomeObject>但现实是它处理a

List<LinkedHashMap>!我的问题是如何将我的LinkedHashMap重新放回“

SomeObject”中。显然,这是一个手动过程,但我的意思是我什至无法提取这些值。

如果我这样做:

for (LinkedHashMap lhm : someObjectList) {

// Convert the values back

}

我收到一个编译错误,告诉我someObjectList的类型为’SomeObject’,而不是LinkedHashMap。

如果我这样做:

for (SomeObject lhm : someObjectList) {

// Convert the values back

}

我收到一个运行时错误,告诉我LinkedHashMap无法转换为’SomeObject’。

回答:

您可以ObjectMapper.convertValue()按值使用,也可以对整个列表使用。但是您需要知道要转换为的类型:

POJO pojo = mapper.convertValue(singleObject, POJO.class);

// or:

List<POJO> pojos = mapper.convertValue(listOfObjects, new TypeReference<List<POJO>>() { });

这在功能上与您做的相同:

byte[] json = mapper.writeValueAsBytes(singleObject);

POJO pojo = mapper.readValue(json, POJO.class);

但避免将数据实际序列化为JSON,而是使用内存中事件序列作为中间步骤。

以上是 将LinkedHashMap转换为复杂对象 的全部内容, 来源链接: utcz.com/qa/434148.html

回到顶部