我使用以下格式返回数据构建了一个服务。
def responseData = [
'results': results,
'status': results ? "OK" : "Nothing present"
]
render(responseData as JSON)
输出看起来像这样,我根据Fiddler验证了输出
{ “结果”:[{ “类”: “com.companyName.srm.ods.territory.Apo”, “ID”:2 “apoId”: “5T9B0”}], “状态”:“行“}
这是一个简单的POST调用,带有一系列来自搜索的参数。
使用HTTPBuilder我得到了不同的结果
http.request(groovyx.net.http.Method.POST, groovyx.net.http.ContentType.URLENC) {req ->
uri.path = restUrl
body = requestData
response.success = {resp, json ->
println resp.statusLine.statusCode
println resp.statusLine
def slurper = new JsonSlurper()
String s = json.toString()
println s
returnJson = slurper.parseText(s)
}
response."422" = {resp, json ->
println ${resp.statusLine}
}
response.failure = {resp ->
println ${resp.statusLine}
}
}
[ “结果”:[{ “类”: “com.companyName.srm.ods.territory.Apo”, “ID”:2 “apoId”: “5T9B0”}], “状态”:“行“:空]
这变成了一个映射对,其中键是JSON,值为null,这使得HTTPBuilder为什么会这样做感到困惑。
为了解析JSON,我必须进行以下附加编码 s = s.replace(':null]','') s = s.replace('[','')
对于这种类型的实现,这似乎过于复杂。 我已经调试了,没有任何有趣的东西来自于此。 任何想法
答案 0 :(得分:0)
我使用构建器0.7.1并以下一种方式获取json响应:
http.request(Method.POST, ContentType.TEXT) {
uri.path = pathToService
headers.'User' = user
headers.Accept = 'application/json'
body = requestBody //here I post some json
response.success = { resp, reader ->
//println reader.text;
println "response status: ${resp.statusLine}"
return = reader.text
}
response.failure = { resp, reader ->
println "Request failed with status ${resp.status}"
reader.responseData.results.each {
println " ${it.titleNoFormatting} : ${it.visibleUrl}"
}
}
}