2016-11-10 2 views
2

Ich habe eine GET Restful service, die JSON zurückgeben. Ich muss Antwortzeit von diesem Service bekommen. Meine Anforderung ist, dass, wenn ich versuche, JSON-Daten von diesem Dienst und zu bekommen, wenn dieser Dienst mehr als 10 Sekunden dauern, dann muss ich es einige andere Seite umleiten. Also wie kann ich das tun?Java erhalten Antwortzeit von GET Restful Service

Mein Code ist unten

gegeben
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"); 
} 

Ich bin mit Java mit Eclipse Mars 1.

+0

Mögliches Duplikat [HttpURLConnection Timeout Frage] (http: // stackover flow.com/questions/2799938/httpurlconnection-timeout-question) – Sneh

+0

Sie können die akzeptierte Antwort hier für das erforderliche Verhalten überprüfen. [Connection Timeout] (http://stackoverflow.com/questions/2799938/httpurlconnection-timeout-question) –

Antwort

0

erste Satz-Timeout und dann die Timeout-Ausnahme abfangen und eine neue Anfrage stellen:

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

    [...] readData(req); 

} catch (SocketTimeoutException e) { 
    // do request again 
} 

Edit: Readtimeout ist optional. Ich benutze es immer, weil ich zu lange auf Daten warten möchte.

+0

Warum verwenden Sie SetReadTimeout? Ist das nützlich für mich? – user3441151

+0

@ user3441151 http://stackoverflow.com/questions/3069382/what-is-the-difference-between-connection-and-read-timeout-for-sockets – dit

+0

Ich verwende "HttpURLConnection req = (HttpURLConnection) url.openConnection(); req.setConnectTimeout (10); req.setReadTimeout (10); req.connect(); " aber es schickt mich immer zur ausnahme? – user3441151

3

HttpURLConnection eine setConnectTimeout Methode hat.

Sie können es verwenden und die SocketTimeoutException fangen, dann können Sie auf die andere Seite umleiten, die Sie möchten.

bearbeiten

Wenn Sie die Antwort so wie man will, und die Dauer auch, können Sie die aktuelle Systemzeit juste vor dem Aufruf nehmen, dann nach Reaktion vergleichen die Zeit, die Ihre Anfrage nahm.

0
long start = System.currentTimeMillis(); 
chain.doFilter(request, response); 
long elapsedTime = System.currentTimeMillis() - start; 

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

Scheck elapsedTime weniger als oder gleich 10 ist oder nicht, hier anfordern und respone ist von ServletRequest und ServletResponse

0

zunächst Sie setReadTimeout wollen oder setConnectTimeout in URL-Anfrage und fangen java.net .SocketTimeoutException dann in Fang zu Ihrer neuen uRL als Code umleiten unter

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(); 
    }