我有一个GET Restful service
返回JSON。我必须获得该服务的响应时间。
我的要求是,当我尝试从该服务获取JSON数据时,如果该服务需要超过10秒,那么我必须将其重定向到另一个页面。
那我怎么能这样做呢?
我的代码如下:
import java.net.URL;
import java.net.HttpURLConnection;
URL url = new URL(sURL);
HttpURLConnection req = (HttpURLConnection) url.openConnection();
req.connect();
if (req.getResponseCode() == HttpURLConnection.HTTP_OK) {
System.out.println("ResponseCode = HTTP_OK");
}
我在Eclipse Mars 1中使用Java。
答案 0 :(得分:3)
HttpURLConnection
有setConnectTimeout
方法。
您可以使用它并捕捉SocketTimeoutException
,然后您可以重定向到您想要的其他页面。
修改强>
如果您还是想要响应,还有持续时间,您可以在通话前获取当前系统时间juste,然后在响应后比较您的请求所花费的时间。
答案 1 :(得分:0)
首先设置超时,然后捕获超时异常并发出新请求:
try {
req.setConnectTimeout(TimeUnit.SECONDS.toMillis(10));
req.setReadTimeout(TimeUnit.SECONDS.toMillis(10));
[...] readData(req);
} catch (SocketTimeoutException e) {
// do request again
}
编辑: readTimeout是可选的。我一直在使用它,因为我想等待数据太长时间。
答案 2 :(得分:0)
long start = System.currentTimeMillis();
chain.doFilter(request, response);
long elapsedTime = System.currentTimeMillis() - start;
if(elapsedTime <= 10){
System.out.println("ResponseCode = HTTP_OK");
}
检查elapsedTime是否小于或等于10,这里请求和respone来自ServletRequest和ServletResponse
答案 3 :(得分:0)
首先你要在url请求中 setReadTimeout 或 setConnectTimeout 并捕获java.net.SocketTimeoutException然后在catch重定向到你的新url,如下面的代码
import java.net.URL;
import java.net.HttpURLConnection;
try {
URL url = new URL(sURL);
HttpURLConnection req = (HttpURLConnection) url.openConnection();
req .setReadTimeout(10000); // 10 seconds
if (req.getResponseCode() == HttpURLConnection.HTTP_OK) {
System.out.println("ResponseCode = HTTP_OK");
}
} catch (java.net.SocketTimeoutException e) {
req = (HttpURLConnection) new URL("your new URL").openConnection();
}