只需将orientdb从v2.1.19迁移到v3.0.2,我使用的代码就有问题。
现在基本上执行此操作将引发强制转换异常:
Map<String, String> myMap = vertex.getProperty("myMap");
String test = new ObjectMapper().writeValueAsString(myMap);
位置
myMap
:orientdb数据库中vertex
顶点的嵌入式地图属性。ObjectMapper
:com.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
。这似乎不适合我。
答案 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