Gremlin GroovyTranslator生成错误结果并在远程服务器上失败
我正在使用Gremlin java,发现GroovyTranslator在Gremlin GroovyTranslator生成错误结果并在远程服务器上失败,gremlin,Gremlin,我正在使用Gremlin java,发现GroovyTranslator在$符号之前添加了额外的\, 这会导致查询无法在远程服务器上执行 GraphTraversal traversal = graph.addV().property("amount", "$1"); System.out.println(GroovyTranslator.of("g").translate(traversal.asAdmin().getBytecode
$
符号之前添加了额外的\
,
这会导致查询无法在远程服务器上执行
GraphTraversal traversal = graph.addV().property("amount", "$1");
System.out.println(GroovyTranslator.of("g").translate(traversal.asAdmin().getBytecode()));
翻译结果:
g.addV().property("amount","\$1")
\$
替换为$
,但我不确定是否会有更多特殊字符出现此问题
在我看来,使用反斜杠总是失败的。
我认为以下方法应该有效,但不能:
curl -X POST -d '{"gremlin":"g.V().has(\"key\",\"\\$\")"}' ...
在Groovy中,如果使用Groovy字符串(GStrings),美元符号具有特殊的含义。它用于指示插值应按以下方式进行:
gremlin> a=3
==>3
gremlin> "The number is $a"
==>The number is 3
如果您连接的服务器使用Groovy原样解析查询,则需要反斜杠。如果服务器未按原样使用Groovy,则需要删除反斜杠
使用GroovyTranslator还需要注意一些其他事项。当它生成文字数字时,它会将一个类型转换(如
(int)3
)放入查询中。根据连接到的后端图形数据库,您可能还需要删除它们。这是否意味着如果服务器不使用Groovy,就无法使用反斜杠,我尝试了转义反斜杠“\\\”,查询失败我能够在连接到远程图形的测试查询中从Gremlin控制台使用反斜杠。