我有一个Java
文件,根据今天的日期获取文件。
例如20151202data.csv
如果今天的文件不可用,那就是昨天。该程序获得今天的文件很好,当我尝试回滚时,我遇到错误。回复是空的。
代码
errorCount = 0;
public static JSONArray getJSON(String url)
HttpClient httpClient = new DefaultHttpClient();
JSONArray jArray = new JSONArray();
Object[] q = null;
Deque<String> queue = new ArrayDeque<String>();
try{
logger.info("\nSending 'GET' request to URL : " + url);
HttpGet httpGet = new HttpGet(url);
HttpResponse response = httpClient.execute(httpGet);
int responseCode = response.getStatusLine().getStatusCode();
logger.info("Response Code : " + responseCode);
if (responseCode != 404){
...Do Things...
else{
if(errorCount > 0){
logger.info("Cannot find data.csv for " + getDayBefore(errorCount));
return null;
}else{
errorCount++;
logger.info("404: Today's file couldn't be found. Using " + getDayBefore(errorCount) + "data.csv");
getJSON("/data/"+ getDayBefore(errorCount)+"data.csv");
errorCount = 0;
}
}
return jArray;
}finally{
httpClient.getConnectionManager().shutdown();
}
当我尝试获取昨天的数据时,我得到[]
作为回复,即使20151201data.csv
是20151202data.csv
的精确副本,也会记录200个响应代码。
日志
Sending 'GET' request to URL : http://www.test.com/data/20151202data.csv
Response Code : 404
404: Today's file couldn't be found. Using 20151201data.csv
Sending 'GET' request to URL : http://www.test.com/data/20151201data.csv
Response Code : 200
响应
[]
我有什么遗失的吗?
答案 0 :(得分:-1)
首先,对于这个问题,我不会使用递归,特别是在静态方法上;第二,不清楚在得到响应代码和数据之前会发生什么。
此外,您正在从名为/etc/chef/ohai/hints/ec2.json
的方法下载csv。这令人困惑。
从csv到json的转换在哪里?这没有显示。 Http响应代码是200,好的,但响应是空的吗?您是否检查过csv是空的还是只有标题?从csv到json的转换在任何时候都会失败吗?也许回到空名单?
问题更新后:
您永远不会返回递归getJson
调用的结果
getJson
我会将递归转换为循环,因此更容易阅读。在这种情况下,我不认为递归是正确的工具。