Java get GET Restful Service的响应时间

Posted

技术标签:

【中文标题】Java get GET Restful Service的响应时间【英文标题】:Java get Response time of GET Restful Service 【发布时间】:2017-03-24 07:48:54 【问题描述】:

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

【问题讨论】:

HttpURLConnection timeout question的可能重复 您可以在此处查看接受的答案以了解所需的行为。 Connection Timeout 【参考方案1】:

HttpURLConnection 有一个setConnectTimeout 方法。

您可以使用它并捕获SocketTimeoutException,然后您可以重定向到您想要的其他页面。

编辑

如果您仍然想要响应以及持续时间,您可以在调用之前获取当前系统时间,然后在响应之后比较您的请求所用的时间。

【讨论】:

【参考方案2】:

先设置超时,然后捕获超时异常并发出新请求:

try 
    req.setConnectTimeout(TimeUnit.SECONDS.toMillis(10)); 
    req.setReadTimeout(TimeUnit.SECONDS.toMillis(10));

    [...] readData(req);

 catch (SocketTimeoutException e) 
    // do request again

编辑: readTimeout 是可选的。我一直在使用它,因为我希望等待数据的时间过长。

【讨论】:

为什么要使用 setReadTimeout?这对我有用吗? @user3441151 ***.com/questions/3069382/… 我正在使用“HttpURLConnection req = (HttpURLConnection) url.openConnection();req.setConnectTimeout(10);req.setReadTimeout(10);req.connect();”但它总是让我例外? TIMEOUT 以毫秒为单位? 我正在使用您的代码并等待 10 秒钟,但它对我不起作用。它没有进入 catch 块?【参考方案3】:
long start = System.currentTimeMillis();   
chain.doFilter(request, response);
long elapsedTime = System.currentTimeMillis() - start;

if(elapsedTime <= 10)
    System.out.println("ResponseCode = HTTP_OK");

检查elapsedTime是否小于等于10,这里请求和响应来自ServletRequest和ServletResponse

【讨论】:

【参考方案4】:

首先你想 setReadTimeoutsetConnectTimeout 在 url 请求中捕获 java.net.SocketTimeoutException 然后在捕获重定向到你的新 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();
   

【讨论】:

以上是关于Java get GET Restful Service的响应时间的主要内容,如果未能解决你的问题,请参考以下文章

在restful api 设计中,如果要获得一个资源,一定要用GET方法么

Restful认识和 IK分词器的使用

java调用restful webservice(转)

RESTful - 我啥时候应该使用 POST 和 GET?

Express—get请求参数 restful API

使用 HTTP RESTful 方法 GET/POST/等。它们是多余的吗?