Groovy 2.4.14、Grails 2.5.6、JVM 1.8、MacOS
我正在尝试(并成功)使用 UPS(联合包裹服务)API 来获取给定追踪号码的追踪信息。该代码有效,UPS 返回一个 JSON 字符串(和
Content-Type: application/json
)。我可以解析 JSON 并且得到我需要的东西。
但是,我更喜欢 HTTPBuilder 进行 JSON 解析,因为它给我的东西有点奇怪。我返回一个 HashMap,第一个键是 JSON 主体,值是
null
。像这样:
{ "JSON stuff": null }
所以我可以解析它并使用普通的 Groovy 工具获得可用的结构:
def json = JSON.parse(data.keySet()[0])
我怀疑唯一可能有帮助的是将“Accept”标头设置为 JSON,但这没有效果。
这是 HTTPBuilder 代码:
def trackingGroup(String tracking) {
def result;
try {
HTTPBuilder http = new HTTPBuilder(urlbase)
http.request(Method.GET, ContentType.URLENC) { req ->
uri.path = "/api/track/v1/shipment/details/${tracking}";
requestContentType = ContentType.URLENC;
headers['Authorization'] = "Bearer ${TOKS.getToken()}"
headers['User-Agent'] = "Me";
headers['Accept'] = ContentType.JSON;
headers['transId'] = "testing"
headers['transactionSrc'] = "testing"
response.success = { resp, json ->
result = json
}
response.failure = { resp, json ->
result = json
}
}
}
catch (error) {
error.printStackTrace();
result = null
}
if (result == null) return "total failure";
result = JSON.parse(result.keySet()[0])
List alltrack = [];
result.trackResponse.shipment.each { shipment ->
shipment.package.each { p ->
alltrack << p.trackingNumber
};
};
return alltrack;
}
我在任何地方都找不到关于
groovyx.net.http
包的 Groovy/Grails 版本的好文档,所以我要问的是,是否有东西可以在 .request()
调用的闭包参数中调用来告诉它假设 JSON 并解析它。