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】:首先你想 setReadTimeout 或 setConnectTimeout 在 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方法么