无法序列化地图包含g orientdb记录ID

时间:2018-07-10 14:20:05

标签: java nosql orientdb

只需将orientdb从v2.1.19迁移到v3.0.2,我使用的代码就有问题。

现在基本上执行此操作将引发强制转换异常:

Map<String, String> myMap = vertex.getProperty("myMap");
String test = new ObjectMapper().writeValueAsString(myMap);

位置

  • myMap:orientdb数据库中vertex顶点的嵌入式地图属性。
  • ObjectMappercom.fasterxml.jackson.databind.ObjectMapper由Jackson提供的串行器。

完整错误标签com.fasterxml.jackson.databind.JsonMappingException: com.orientechnologies.orient.core.id.ORecordId cannot be cast to java.lang.String

为什么无法将ORecordId强制转换为String

我看到的唯一解决方案:检测到地图中存在ORecordId,然后将其手动转换为String。这似乎不适合我。

1 个答案:

答案 0 :(得分:1)

我使用的解决方案(我不太喜欢)

我创建了一个将检索到的属性处理为Map<String, Object>

的方法
public static Map<String, String> convertToStringMap(Map<String, Object> map) {
    if (map == null)
        return null;
    return map.entrySet().stream().collect(Collectors.toMap(
            entry -> entry.getKey(), 
            entry -> entry.getValue().toString()));
}

然后我可以通过Map<String, String>的方式检索我的嵌入式地图

Map<String, String> myMap = convertToStringMap(vertex.getProperty("myMap"))

// Do something with
// (both throw an exception if no passed through convertToStringMap)
String test = new ObjectMapper().writeValueAsString(myMap); // serialize
System.out.println(my.get("anEntryKey")); // print