2013-08-27 63 views
4

我正在创建Server HealthCheck页面。大多数服务器返回的JSONObject和我能够轻松地使用它解析:Java - 检查响应是否为JSON

String jsonText = readAll(br);    
JSONObject json = new JSONObject(jsonText); 
JSONObject resp = json.getJSONObject("Response"); 

现在我的问题是,不返回JSON的其他服务器。有些正在返回字符串,一些PDF文件的一些图像和所有的答复是200好我应该返回正面健康检查。

但是我正在使用未来线程并在4秒后超时我的请求。而且所有返回JSON以外的服务器都会卡住“new JSONObject(jsonText);”

有没有什么办法可以检查在Java中的响应类型是否是JSON?

更新:

,我发现我的错误 - 愚蠢的一个。 在try catch块中,我只捕获IOException,它不捕获JSONException(并没有显示任何错误 - 不知道y)。我已经为JSONException添加了一个新的catch块,它现在适用于我的解决方案。

但是,这不是一个优雅的解决方案,@Dave,@Radai和@Koi的解决方案是正确的解决方案。

+3

尝试将其解析为JSON。如果它不解析,那不是JSON。检查响应的内容类型。如果是文件检查扩展名。等等 –

+1

他们为什么卡住了?我希望抛出一些异常..你是将整个响应读入一个字符串还是直接从输入流中运行json解析器? – radai

+0

戴夫我已经试图解析它为JSON。 我正在接受字符串“jsonText”中的响应,然后将此文本放入JSONObject中。我陷入了第二步。 –

回答

7

不要解析字符串。返回一步,然后检查HTTP响应的标头Content-Type。如果响应包含JSON数据,则Content-Type应为application/jsonsource)。

+0

我不相信这是一个保证吗? – Woot4Moo

+1

@ woot4Moo其可能的JSOn响应可能有不正确的内容类型,但这是官方接受的格式。因此正确的答案。 但是,您可以通过放置try catch块来确保确保 - 这就是我所做的。 –

1

使用response.getMediaType()检查响应中的MediaType。如果它是json,它将返回application/json。

+0

谢谢。正是我在找的东西。 – Tafsen