Java - 检查响应是否为JSON

时间:2013-08-27 17:49:39

标签: java json

我正在创建一个Server HealthCheck页面。大多数服务器返回JSONObject,我可以使用:

轻松解析它
String jsonText = readAll(br);              
JSONObject json = new JSONObject(jsonText);
JSONObject resp = json.getJSONObject("Response");

现在我的问题是其他没有返回JSON的服务器。有些人正在返回String,有些pdf文件会返回一些图片,因为所有回复都是200 OK我应该返回Positive healthcheck。

但是我使用Future Threads并在4秒后超时我的请求。并且所有返回除JSON之外的任何服务器的服务器都被卡在“new JSONObject(jsonText);”

我有什么方法可以检查Java中是否有JSON的响应类型?

更新

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

然而,这不是优雅的解决方案,@ Dave,@ Radai和@Koi的解决方案是正确的方法。

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

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