我正在创建一个服务器健康检查页面。大多数服务器返回 JSONObject,我可以使用以下方法轻松解析它:
String jsonText = readAll(br);
JSONObject json = new JSONObject(jsonText);
JSONObject resp = json.getJSONObject("Response");
现在我的问题是其他服务器不返回 JSON。一些返回字符串,一些 pdf 文件一些图像,因为所有的响应都是 200 OK 我应该返回 Positive healthcheck。
但是,我正在使用 Future Threads 并在 4 秒后超时我的请求。并且所有返回 JSON 以外的任何内容的服务器都卡在“new JSONObject(jsonText);”中。
有什么方法可以检查响应的类型是否为 Java 中的 JSON?
更新:
我发现了我的错误——愚蠢的错误。
在 try catch 块中,我只捕获 IOException,它没有捕获 JSONException(并且也没有显示任何错误 - 不知道)。我为 JSONException 添加了一个新的 catch 块,它现在适用于我的解决方案。
然而,这不是优雅的解决方案,@Dave、@Radai 和@Koi 的解决方案是正确的方法。
最佳答案
不要解析字符串。返回上一步,检查 HTTP 响应的 Content-Type
header 。如果响应包含 JSON 数据,则 Content-Type
应为 application/json
( source )。
关于Java - 检查响应是否为 JSON,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18472275/