问题描述
在 apoc.load.jsonParams 的 Neo4j 文档中,有一个如何发出 POST 请求的示例:
CALL apoc.load.jsonParams(
"https://neo4j.com/docs/search/",{method: "POST"},apoc.convert.toJson({query: "subquery",version: "4.0"})
);
但不幸的是,这对我来说还不够,因为我还需要一个带有 POST 请求参数的主体:
[HttpPost("getJson")]
[Produces("application/json")]
public async Task<JsonResult> GetJson(int id,[FromBody] List<string> params)
我的尝试:
CALL apoc.load.jsonParams("http://192.168.1.128:4040/api/getJson?id=17","$.BusinessData[*]") YIELD value WITH ["DATA1","DATA2"] as body return *
错误信息:
Failed to invoke procedure `apoc.load.jsonParams`: Caused by: java.lang.RuntimeException: Can't read url or key http://192.168.1.128:4040/api/getJson?id=17 as json: Server returned HTTP response code: 500 for URL
那么 apoc 调用必须如何完成 POST 请求?
解决方法
来自 apoc.load.jsonParams 文档:
apoc.load.jsonParams(urlOrKey :: STRING?,headers :: MAP?,payload :: STRING?,path = :: STRING?,config = {} :: MAP?) :: (value :: MAP?)
将正文作为有效负载参数传输并使用 apoc.convert.toJson
将其转换为 Json 字符串列表。还需要在标头中将 Content-Type
定义为 application/json
。 (不要忽略反引号)
CALL apoc.load.jsonParams("http://192.168.1.128:4040/api/getJson?id=17",{`Content-Type`:"application/json"},apoc.convert.toJson(["DATA1","DATA2"]),"$.BusinessData[*]") YIELD value as item