You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jQAssistant扫描无法获取retrofit2.http.GET注解值的问题

问题排查与解决

核心原因

不是Cypher语句的问题,而是你对jqassistant扫描Retrofit注解后的图谱结构假设错误——Retrofit的@GET/@POST注解的value属性,并没有按照你写的Annotation->HAS->Value->CONTAINS->Value嵌套结构存储,而是直接作为Annotation节点的属性存在。

验证与修正步骤

1. 确认注解节点的实际结构

执行以下Cypher查询,查看目标方法上注解的具体属性:

MATCH (m:Method)-[:ANNOTATED_BY]->(ann:Annotation)
WHERE m.name IN ["executeQuery", "getQuery"]
RETURN m.name, ann, properties(ann)

你会发现ann节点直接带有value属性,值就是/test/one或/test/two。

2. 使用正确的Cypher查询获取注解值

直接读取Annotation节点的value属性即可,示例查询:

MATCH (client:Interface)-[:DECLARES]->(m:Method)
MATCH (m)-[:ANNOTATED_BY]->(ann:Annotation)-[:OF_TYPE]->(annType:Type)
WHERE annType.name IN ["GET", "POST"]
RETURN m.name, ann.value AS url

或者更简洁的写法(如果jqassistant给注解节点打了对应标签):

MATCH (client:Interface)-[:DECLARES]->(m:Method)
MATCH (m)-[:ANNOTATED_BY]->(ann:GET|POST)
RETURN m.name, ann.value AS url

3. 原查询无效的原因

你之前的Cypher假设注解属性通过嵌套Value节点存储,但jqassistant对不同注解的解析策略不同:对于Java标准注解或部分框架注解可能用嵌套结构,但Retrofit的这类注解,它会直接将value属性扁平化存储到Annotation节点上,所以你的嵌套匹配路径无法命中任何节点。

内容的提问来源于stack exchange,提问作者OStefanova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:26:06