2011-12-14 98 views
0

即时通讯编写一个Java应用程序,发送一个发布请求到服务器,并期望从服务器的JSON。现在,当我需要从服务器获得响应时,我只需要从httpStream的HTTP代码为200(HTTP确定)或者是否有其他情况下从inputStream获取它? ,例如:服务器是否仅在其HTTP 200发送响应?

//... 
if (urlConn.getResponseCode() == HttpURLConnection.HTTP_OK) { 
// only here try to get the response 
} 
//... 

回答

3

这取决于如何实现服务器。检查API,如果服务器有一个。如果它是内部的,请问你的服务器人。

一般来说,如果你的响应代码是2XX或3XX,我会检查反正响应...

+2

201,202,203,204经常用于各种种类的REST的API调用......同样,401,402,或403可能会从一些API的认证失败... 坦率地说回来,我会尝试解析任何返回的东西,即使*像JSON一样闻到*,在这种情况下。 – BRFennPocock 2011-12-14 22:59:37

+0

@BRPocock +1,我同意。解析返回的所有内容。如果这是一个错误或什么的,记录它。如果是JSON,请解析它。如果什么都没有回来,那么你只是失去了纳秒检查。 – 2011-12-14 23:05:42

0

,需要考虑三件事情:

  1. 所有2XX代码表示的一些成功分类。但根据确切的代码,您的阅读代码可能会有所不同。 (例如,204表示成功,但没有内容。)
  2. 有重定向代码(3xx)。这些通常会自动跟随http客户端库,但您也可以将它们设置为不使用,在这种情况下,您需要具有处理这些情况的自定义代码。
  3. 即使您得到表示错误的代码,也可能会在流中返回有价值的信息。你是否想要处理它取决于你的确切需求。
2

如果您与之通信的服务器遵循规范,则200或201响应可以包含实体。 204响应成功,但响应中没有数据。

请参阅此处的第9.5节:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5了解POST的可接受响应的详细信息。下面摘录:

通过POST方法执行的操作可能不会导致可由URI标识的资源 。在这种情况下,200(OK)或204 (无内容)是合适的响应状态,具体取决于 是否包含描述结果的实体。

如果资源已经在源服务器上创建的,则响应 应该是201(创建)和包含其描述请求的 状态,指的是新的资源的实体,和一个位置 报头(见第14.30节)。

相关问题