很抱歉,如果问题可能会重复。我不熟悉Java,而且我遇到了一个Cordova插件,该插件返回非JSON结构的头文件,我认为Map.soString()
表示request.headers()
//These parts works fine returning response body
HttpRequest request = HttpRequest.post(this.getUrlString());
this.setupSecurity(request);
request.headers(this.getHeaders());
request.acceptJson();
request.contentType(HttpRequest.CONTENT_TYPE_JSON);
request.send(getJsonObject().toString());
int code = request.code();
String body = request.body(CHARSET);
JSONObject response = new JSONObject();
response.put("status", code);
// in this line I must put JSON converted headers instead of request.headers()
response.put("headers", request.headers());
我试过
String headers = request.headers().toString();
和
JSONObject headers = new JSONObject(request.headers());
将上述行更改为
response.put("headers", headers);
但它们都没有奏效。
如何将标题作为JSON发送回来?
更多背景信息:
目前响应标头是:
{
null=[HTTP/1.0 200 OK],
Content-Type=[application/json],
Date=[Mon, 25 Jan 2016 07:47:31 GMT],
Server=[WSGIServer/0.1 Python/2.7.6],
Set-Cookie=[csrftoken=tehrIvP7gXzfY3F9CWrjbLXb2uGdwACn; expires=Mon, 23-Jan-2017 07:47:31 GMT; Max-Age=31449600; Path=/, sessionid=iuza9r2wm3zbn07aa2mltbv247ipwfbs; expires=Mon, 08-Feb-2016 07:47:31 GMT; httponly; Max-Age=1209600; Path=/],
Vary=[Accept, Cookie],
X-Android-Received-Millis=[1453708294595],
X-Android-Sent-Millis=[1453708294184], X-Frame-Options=[SAMEORIGIN]
}
并在回复正文中发送。所以我需要解析它们,但我不能这样做。
答案 0 :(得分:1)
这个 应该是这样做的方式:
JSONObject headers = new JSONObject(request.headers());
然而," toString()"标题的显示似乎显示带有null
键的映射条目。这在JSON中不起作用:JSON对象属性名称不能是null
。我的猜测是null
键导致了崩溃。
所以我认为你需要过滤掉"坏"条目;即编码如下:
JSONObject headers = new JSONObject()
for (Map.Entry entry: request.headers().entries()) {
if (entry.getKey() != null) {
headers.put(entry.getKey(), entry.getValue());
}
}