Java-检查响应是否为JSON
我正在创建服务器健康检查页面。大多数服务器返回JSONObject,我可以使用以下方法轻松解析它:Java-检查响应是否为JSON,java,json,Java,Json,我正在创建服务器健康检查页面。大多数服务器返回JSONObject,我可以使用以下方法轻松解析它: String jsonText = readAll(br); JSONObject json = new JSONObject(jsonText); JSONObject resp = json.getJSONObject("Response"); 现在我的问题是其他不返回JSON的服务器。一些返回字符串,一些pdf文件,一些图像,因为所有的回答都是200 OK,我应
String jsonText = readAll(br);
JSONObject json = new JSONObject(jsonText);
JSONObject resp = json.getJSONObject("Response");
现在我的问题是其他不返回JSON的服务器。一些返回字符串,一些pdf文件,一些图像,因为所有的回答都是200 OK,我应该返回肯定的healthcheck
但是,我正在使用未来的线程,并在4秒后超时请求。所有返回除JSON以外的任何内容的服务器都会被困在“newJSONObject(jsonText);”
有没有办法检查respone的类型是JSON还是不是Java
更新:
我发现了我的错误——愚蠢的错误。
在try-catch块中,我只捕获IOException,而没有捕获JSONException(并且也没有显示任何错误-不知道)。我已经为JSONException添加了一个新的catch块,它目前适用于我的解决方案
然而,这不是一个优雅的解决方案,@Dave、@Radai和@Koi的解决方案是正确的解决方案。不要解析字符串。返回一步,检查HTTP响应的
内容类型
头。如果响应包含JSON数据,内容类型应为application/JSON
()。使用response.getMediaType()检查响应中的媒体类型。如果是json,则返回application/json。尝试将其解析为json。如果不解析,就不是JSON。检查响应的内容类型。如果是文件,请检查扩展名。等等,他们为什么被卡住了?我希望会抛出一些异常。。您是将整个响应读入字符串还是直接从输入流运行json解析器?Dave我已经在尝试将其解析为json。我将以字符串“jsonText”获取响应,然后将该文本放入JSONObject中。我在第二步被卡住了。@radai我是1。获取字符串和2中的响应。用这个jsonText创建JSONObject我在第二步遇到了麻烦。除了我的线程超时之外,没有引发任何异常。您还应该检查响应的内容类型头;JSON内容应以application/JSON
的形式发送,我不认为这是一种保证,是吗?@woot4Moo可能JSON响应的内容类型不正确,但这是官方认可的格式。因此,答案是正确的。不过,你可以检查,以确保通过把试抓块-这就是我正在做的。谢谢。这正是我想要的。