【发布时间】:2019-08-22 15:34:37
【问题描述】:
我正在使用 GremlinGroovyScriptEngine 来评估 gremlin 查询(从 REST api 发布)。其结果返回一个 DefaultGraphTraversal 对象。我正在尝试将其序列化为类似于
的结构"result": {
"data": {
"@type": "g:List",
"@value": [
{
"@type": "g:Vertex",
"@value": {
"id": "Identity~1234567",
"label": "Identity",
"properties": {
"object_identifier": [
{
"@type": "g:VertexProperty",
"@value": {
"id": {
"@type": "g:Int32",
"@value": -710449208
},
"value": "1234567",
"label": "object_identifier"
}
}
]
}
}
},
.... more results here
我试过像这样使用 ObjectMapper
mapper = graph.io(GraphSONIo.build(GraphSONVersion.V3_0)).mapper.version(GraphSONVersion.V3_0).create.createMapper
还有这个……
GraphSONMapper.build().
addRegistry(com.lambdazen.bitsy.BitsyIoRegistryV3d0.instance()).
version(GraphSONVersion.V3_0).create().createMapper()
以及上述的其他变体。 但是,它被反序列化为类似
{"@type":"g:List","@value":[]}
但列表中的各个项目未正确序列化。
编辑
代码示例: gremlinQuery 例如。 g.V('id_12345')
List<Object> results = ((DefaultGraphTraversal<Vertex, Object>) this.engineWrite.eval(gremlinQuery, this.bindingsWrite)).toList();
ObjectMapper mapper = writeGraph.io(GraphSONIo.build(GraphSONVersion.V3_0))
.mapper()
.version(GraphSONVersion.V3_0)
.create()
.createMapper();
mapper.writeValueAsString(results);
导致
{"@type":"g:List","@value":[]}
我通过迭代结果和序列化来解决这个问题:
List<Object> resList = new ArrayList<>();
results.stream().forEach(list -> resList.add(list));
String data = mapper.writeValueAsString(resList);
这确实产生了正确的结果,但似乎我错过了一些重要的东西,以便能够一步完成。
我在这里做错了什么? 非常感谢
【问题讨论】:
-
我认为您可能需要分享一些代码来显示如何将遍历传递给构建的
GraphSONMapper。
标签: java groovy gremlin tinkerpop3