我正在创建一个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的解决方案是正确的方法。
答案 0 :(得分:7)
不要解析字符串。返回一步,检查HTTP响应的Content-Type
标头。如果响应包含JSON数据,则Content-Type
应为application/json
(source)。
答案 1 :(得分:1)
使用 response.getMediaType()检查响应中的MediaType。如果它是json,则返回application / json。