我在 SO 和其他地方阅读了这篇文章和其他几篇关于如何通过 HttpBuilder 以 JSON 作为数据内容发送 Post 调用的文章。我的问题是这些解决方案都不起作用!
我的问题只是略有不同。 我在文件中有现有的 JSON 数据。 当我尝试使用 curl 将其发送到 REST 接口时:
curl -X POST -u "username:password" -d @/path/to/myFile.json http://localhost:8080/path/here --header "Content-Type:application/json"
一切都很好。这是我所在的位置(那里有一些额外的代码,请继续阅读):
def myFile = new File('/path/to/myFile.json')
if (!myFile.exists()) println "ERROR! Do not have JSON file!"
def convertedText = myFile.text.replaceAll('\\{', '[')
convertedText = convertedText.replaceAll('\\}', ']')
def jsonBldr = new JsonBuilder()
jsonBldr myFile.text
println jsonBldr.toString()
def myClient = new groovyx.net.http.HTTPBuilder('http://username:password@localhost:8080/my/path')
myClient.setHeaders(Accept: 'application/json')
results = myClient.request(POST, JSON) { req ->
body = [ jsonBldr.toString() ]
requestContentType = JSON
response.success = { resp, reader ->
println "SUCCESS! ${resp.statusLine}"
}
response.failure = { resp ->
println "FAILURE! ${resp.properties}"
}
}
这导致使用以下数据的“失败”关闭:
statusLine:HTTP/1.1 400 Exception evaluating property 'id' for java.util.ArrayList, Reason: groovy.lang.MissingPropertyException: No such property: id for class: java.lang.String
FWIW,我的 JSON 在任何地方都没有“id”。如果我将“body”行从“[jsonBldr.toString()]”更改为“[convertedText]”——这就是代码在那里的原因,我会得到同样的错误。如果我取出正文上的括号,我会收到一条错误消息,指出正文不是数组的数据(因为它是一个 Map)。
谁能告诉我 %%$#@ 我做错了什么???