如何将HTTP请求的标头添加到响应中

时间:2016-01-25 12:42:58

标签: java

很抱歉,如果问题可能会重复。我不熟悉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]
}

并在回复正文中发送。所以我需要解析它们,但我不能这样做。

1 个答案:

答案 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());
    } 
}