如何修改JanusgraphGremlin服务器API响应,字符串数组

问题描述

最近,我已经将Janusgraph升级到版本0.5.2,它支持序列化程序版本GryoMessageSerializerV3d0,.. V2,.. V1(向后兼容)。在version3回应中 对于数据类型字符串和字符串数组,响应格式相同。我希望响应分开。

当前响应格式(v3):

"@type": "g:Map","@value": [
    "_id",// string
    {
        "@type": "g:List","@value": [
            "id1"
        ]
    },"names",// array of strings
    {
        "@type": "g:List","@value": [
            "Name1","Name2"
        ]
    },]

对于两种数据类型,响应格式均为 {“ @ type”:“ g:List”,} 。我的要求是如何区分数据类型是否为数组/字符串。我无法检查循环中的每个键,考虑到数组数据类型很多,这将不是一个合适的解决方案。有什么可以在序列化级别配置的。任何其他将响应分开的解决方案(将数组作为数组,将字符串作为字符串)。

注意: 即使对于其他序列化版本(v2,v1)也没有区别,但是响应样式也有所不同([“ id1”],[“ Name1”,“ Name2”])。一切都是字符串数组。

谢谢。

解决方法

对于GraphSON和GraphBinary,我们选择将数组视为List。您将必须将自己的自定义序列化插件插入GraphSON。通过稍微看一下JanusGraph代码,您可以了解开发一个代码所涉及的内容。您需要自定义serializer/deserializer实例和一个Module才能将它们公开给GraphSON。然后,您可以使用addCustomModule()来构建GraphSONMapper。您将该映射器构建器实例交给新的GraphSONMessageSerializer

对于服务器来说,这意味着添加您自己的IoRegistry(JanusGraph示例[here])4,并将其添加到Gremlin Server configuration file

对于需要手动构造GraphSONMessageSerializer的驱动程序,然后在使用Cluster选项提供Builder来构建带有serializer(MessageSerializer)的{​​{1}}对象时。

您可以使用Gryo作为替代方法,我相信它将保留数组类型,但是请注意:

  1. Gryo已过时。没有计划完全删除它,但是二进制格式的首选是GraphBinary(尽管如我前面提到的那样,它不支持数组。
  2. Gryo仅适用于JVM。不支持Python,.NET等。