刚刚将 orientdb 从 v2.1.19 迁移到 v3.0.2,我使用的代码存在问题。
现在基本上这样做会引发强制转换异常:
Map<String, String> myMap = vertex.getProperty("myMap");
String test = new ObjectMapper().writeValueAsString(myMap);
地点
myMap
:orientdb 数据库中vertex
顶点的嵌入 map 属性。ObjectMapper
:com.fasterxml.jackson.databind.ObjectMapper
Jackson 提供的序列化器。
完整错误标签:com.fasterxml.jackson.databind.JsonMappingException:com.orientechnologies.orient.core.id.ORecordId无法转换为java.lang.String
为什么ORecordId
不能再转换为String
?
我看到的唯一解决方案:检测 map 中是否存在 ORecordId
并将其手动转换为 String
。这似乎不适合我。
最佳答案
我使用的解决方案(我不太喜欢它)
我创建了一个方法,将检索到的属性处理为 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 检索为 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
关于java - 无法序列化包含 orientdb 记录 ID 的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51267658/