2015-04-29 1 views
5

Ich habe einen sehr einfachen Code, der nicht funktioniert.HttpURLConnection GET Anruf mit Parametern funktioniert nicht

Klasse HttoCon:

package test; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.net.URLConnection; 
import java.net.URLEncoder; 

public class HttpCon { 


public static void main(String[] args) { 
    try { 
     sendGet(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
    // HTTP GET request 
     private static void sendGet() throws Exception { 

      String url = "http://myweb.com/public/resource/data/stream"; 

      URL obj = new URL(url); 
      HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

      // optional default is GET 
      con.setRequestMethod("GET"); 


      //add request header 
      con.setRequestProperty("begin", "1430295300000"); 
      con.setRequestProperty("end", "1430297279988"); 
      con.setRequestProperty("id", "140621"); 
      con.setRequestProperty("time", "FIFTEEN_MINUTE"); 

      int responseCode = con.getResponseCode(); 
      System.out.println("\nSending 'GET' request to URL : " + url); 
      System.out.println("Response Code : " + responseCode); 

      BufferedReader in = new BufferedReader(
        new InputStreamReader(con.getInputStream())); 
      String inputLine; 
      StringBuffer response = new StringBuffer(); 

      while ((inputLine = in.readLine()) != null) { 
       response.append(inputLine); 
      } 
      in.close(); 

      //print result 
      System.out.println(response.toString()); 

     } 
} 

Fehler Trace:

{"fault":{"exceptionType":"MissingServletRequestParameterException","host":"12.205.101.123","cause":"Required Long parameter 'id' is not present","status":"400","query":"/public/resource/data/stream","stackTrace":"org.springframework.web.bind.MissingServletRequestParameterException: Required Long parameter 'id' is not present\n\tat org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.raiseMissingParameterException(AnnotationMethodHandlerAdapter.java:774)\n\tat org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveRequestParam(HandlerMethodInvoker.java:509)\n\tat 

HINWEIS:

Wenn ich die URL direkt in Browser traf es funktioniert gut.

http://myweb.com/public/resource/data/stream?begin=1430295300000&end=1430297279988&id=140621&time=FIFTEEN_MINUTE

UPDATE:

Mit curl:

curl -X GET http://myweb.com/public/resource/data/stream?begin=1430295300000&end=1430297279988&id=140621&time=FIFTEEN_MINUTE 

Above curl funktioniert nicht und die Ausnahme ist gleich -

curl -X GET 'http://myweb.com/public/resource/data/stream?begin=1430295300000&end=1430297279988&id=140621&time=FIFTEEN_MINUTE' 

Diese curl funktioniert gut .

+0

try con.setRequestProperty ("id", "140621L"); – Pratik

+1

Link scheint nicht zu funktionieren – Pratik

+0

@Pratik - Ich habe den Link nur für Demozwecke geändert. –

Antwort

5

Sie erstellen einen String mit den Parametern, der dann an die URL angehängt wird. Erstellen Sie eine URL Obj von diesem. Zum Beispiel: -

String this.url = "http://myweb.com/public/resource/data/stream"; 
this.url += "?begin=1430295300000&end=1430297279988&id=140621 
    &time=FIFTEEN_MINUTE"; 
this.urlObj = new URL(this.url); 

Dann erstellen Sie die Verbindung wie in Ihrem ursprünglichen Beispiel.

1

openConnection wird die Verbindung herstellen und die GET ausgeben. Nachfolgende Einstellungen von GET Parametern am zurückgegebenen URLConnection-Objekt werden ignoriert, da die URL bereits geöffnet wurde.

die Parameter an die URL hinzufügen als Query-String oben ebenso wie der Link params und öffnen Sie den Link

oder

versuchen, die Parameter an den Server zu senden (das ist noch besser)

Verwandte Themen