Java获得GET Restful Service的响应时间

时间:2016-11-10 10:13:27

标签: java

我有一个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。

4 个答案:

答案 0 :(得分:3)

HttpURLConnectionsetConnectTimeout方法。

您可以使用它并捕捉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();
   }