Java程序调用Aviation Edge API返回空输出求助
排查Java调用Aviation Edge API返回空的问题
看起来你遇到的问题大概率是请求参数或者响应读取方式不对导致的,咱们一步步来梳理:
1. 首先检查你的请求URL!
你代码里的URL写的是:
URL url = new URL("http://aviation-edge.com/v2/public/flights?key=[key]=3");
这里有两个明显的错误:
[key]是占位符,你得把它替换成你实际的Aviation Edge API密钥,不能直接写在URL里- 末尾多了个
=3,正确的参数格式应该是key=你的密钥,如果有额外参数,需要用&来连接(比如key=XXX&someParam=YYY)
Firefox能正常返回结果,说明你在浏览器里用的是正确的URL,但Java代码里的这个错误URL会导致API无法识别你的请求,自然返回空内容或者错误响应——这应该是核心问题。
2. 响应读取逻辑不完整
你现在用br.readLine()来读取响应,这个方法只能读取一行内容。而Firefox返回的JSON是格式化后的多行内容,哪怕URL正确,你也只能拿到第一行的[,而不是完整的数组。
改成循环读取所有行来拼接完整响应:
StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); } output = sb.toString();
这样才能拿到包含完整数组的JSON内容。
3. 建议添加错误响应的读取逻辑
如果修正URL后还是有问题,建议你在异常处理里读取API的错误流,这样能知道API返回的具体错误(比如密钥无效、参数错误等):
catch (Exception e) { System.out.println("Exception in WeatherApi:- " + e); // 读取错误流获取API的错误描述 if (conn != null) { try (InputStreamReader errIn = new InputStreamReader(conn.getErrorStream()); BufferedReader errBr = new BufferedReader(errIn)) { String errLine; StringBuilder errSb = new StringBuilder(); while ((errLine = errBr.readLine()) != null) { errSb.append(errLine); } System.out.println("API错误响应内容: " + errSb.toString()); } catch (Exception errE) { errE.printStackTrace(); } } }
最后总结
先优先修正URL的参数格式,把[key]换成你的真实密钥,去掉多余的=3,然后调整响应读取逻辑来获取完整内容,应该就能解决返回空的问题了。
内容的提问来源于stack exchange,提问作者Grafik Krystian
相关产品推荐
相关产品推荐

