【问题标题】:http response Header informationhttp响应头信息
【发布时间】:2016-03-29 09:36:07
【问题描述】:

所以对于某些人来说这可能是一个愚蠢的问题,但我有这个响应标题:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Atr: 10
X-Atr2: 1
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 29 Mar 2016 09:17:26 GMT

以及随之而来的结果:

{"site": [
  {
  "id": "1",
  "name": "James"
  },
   {
  "id": "2",
  "name": "Katia"
  },
  {
  "id": "3",
  "name": "Sam"
  }

我想做的是更改 HTTP/1.1 200 OK 以防万一我得到类似 HTTP/1.1 206 你有一些结果 并且在同时显示 JSON 结果。如果我们没有任何结果,它会像:HTTP/1.1 400 没有找到任何结果并且 JSON 结果会像:

[]

所以我尝试的是以下内容:

if (response.getSite().size() <= 0) {
     responseHttp.sendError(HttpServletResponse.SC_ACCEPTED, "you have some    results"); 
    } else {

 responseHttp.sendError(HttpServletResponse.SC_ACCEPTED, "you have some    results");}

在这两种情况下,它都编辑了 HTTP/1.1,但没有显示任何消息或 JSON 结果。

希望我能很好地解释我的问题,感谢您的时间和帮助。

【问题讨论】:

  • HTTP/1.1 400 未找到任何结果 - 应该改为 HTTP 404
  • 好的,我同意,但我怎么能改变我的代码,知道用 sendError 它不起作用!

标签: java json http


【解决方案1】:

您只需要相应地设置状态代码和消息。您确实为这两种情况设置了 SC_ACCEPTED。

顺便说一句。 SC_ACCEPTED 是 202。 对于“没有找到任何结果”,您可以使用SC_NOT_FOUND (404); 或者,您可以只使用整数

您可以找到SC_...here

如果您想发送消息和 json,您可能需要将 json 字符串嵌入到消息中。否则,您可能只需要在正文中发送 json 并将消息移动到标头中的 HTTP 状态描述。 sendError(int sc, String msg) 方法创建一个类似 HTML 的页面,其中嵌入了您的消息(请参阅 here)。

【讨论】:

  • 感谢您的回答,我已尝试使用 responseHttp.setStatus(sc);with an int sc=202;它工作但与responseHttp.sendError(HttpServletResponse.SC_ACCEPTED, "Some sites returned"); 或` responseHttp.setStatus(responseHttp.SC_FOUND,sm);` 它不起作用!你能解释一下你的最后一段吗?
  • 究竟是什么不清楚?您是如何在工作场景中返回消息和/或 json 的(在 setStatus(sc) 之后)?顺便提一句。 setStatus(sc, sm) 已弃用并由您使用的方法替换。
  • 是的,我看到 setStatus(sc, sm) 已被删除,sendError(int sc, String msg) 方法正在返回我 HTTP/1.1 200 OK
【解决方案2】:

我假设你的意思是你想设置响应状态,所以我建议使用类似的东西:

if (response.getSite().size() <= 0) {
     responseHttp.sendError(HttpServletResponse.SC_BAD_REQUEST, "Bad Request"); 
    } else {
     responseHttp.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
     //your other codes for sending JSON response goes here:
  }

【讨论】:

  • 第二个有效,所以如果我有一些结果,我可以看到标题发生变化!但如果没有找到结果,我会得到这个:HTTP/1.1 200 OK任何想法?
  • @MehaibiaOumaima 尝试 responseHttp.setStatus(HttpServletResponse.SC_BAD_REQUEST);看看它是否有帮助而不是 sendError
  • 没有我有以下结果HTTP/1.1 200 OK Server: Apache-Coyote/1.1 X-Total-Count: 0 X-Result-Count: 1 Content-Type: application/json;charset=UTF-8 Transfer-Encoding: chunked Date: Tue, 29 Mar 2016 12:35:51 GMT {"site":[]}
  • @MehaibiaOumaima 你确定你达到了“if”部分的代码吗?放置一个调试断点或一个简单的 println 来检查你是否到达那里
  • X-Total-Count: 0 X-Result-Count: 1 让我想到,条件检查可能有问题。也许你可以尝试调试(服务器端,例如通过日志记录),在你的 if 子句中你最终的位置。
猜你喜欢
  • 2011-07-19
  • 2020-10-22
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 2016-03-04
相关资源
最近更新 更多