2013-09-27 4 views
6

Ich versuche, einen Restdienstanruf in Java zu machen. Ich bin neu im Web und Rest Service. Ich habe Restdienst, der JSON als Antwort zurückgibt. Ich habe den folgenden Code, aber ich denke, dass es unvollständig ist, weil ich nicht weiß, wie man Ausgabe mit json verarbeitet.JSON-Antwort als Teil des Restaufrufs in Java abrufen

public static void main(String[] args) { 
     try { 

      URL url = new URL("http://xyz.com:7000/test/db-api/processor"); 
      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      connection.setDoOutput(true); 
      connection.setInstanceFollowRedirects(false); 
      connection.setRequestMethod("PUT"); 
      connection.setRequestProperty("Content-Type", "application/json"); 

      OutputStream os = connection.getOutputStream(); 
      //how do I get json object and print it as string 
      os.flush(); 

      connection.getResponseCode(); 
      connection.disconnect(); 
     } catch(Exception e) { 
      throw new RuntimeException(e); 
     } 

    } 

Bitte helfen Sie. Ich bin neu in Raststätten und JSON. Vielen Dank im Voraus.

+0

Wenn Sie Frühling verwenden, es macht Ihnen das Leben leicht. Es führt eine HTTP-Anforderung aus, konvertiert die HTTP-Antwort in einen Objekttyp Ihrer Wahl und gibt dieses Objekt zurück. https://spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate –

Antwort

2

Da dies ein PUT Anfrage Sie ein paar Dinge sind vermisst hier:

OutputStream os = conn.getOutputStream(); 
os.write(input.getBytes()); // The input you need to pass to the webservice 
os.flush(); 
... 
BufferedReader br = new BufferedReader(new InputStreamReader(
     (conn.getInputStream()))); // Getting the response from the webservice 

String output; 
System.out.println("Output from Server .... \n"); 
while ((output = br.readLine()) != null) { 
    System.out.println(output); // Instead of this, you could append all your response to a StringBuffer and use `toString()` to get the entire JSON response as a String. 
    // This string json response can be parsed using any json library. Eg. GSON from Google. 
} 

Werfen Sie einen Blick auf this beim Auftreffen auf einen Web Service eine klare Vorstellung haben.

0

Da Ihr Content-Type-Anwendung ist/json, können Sie direkt die Antwort auf ein JSON-Objekt zum Beispiel werfen

JSONObject recvObj = new JSONObject(response); 
2

Ihr Code meist korrekt ist, aber es gibt Fehler über OutputStream. Wie R.J sagte OutputStream wird benötigt, um Anfrage Körper an den Server zu übergeben. Wenn Ihr Ruheservice keinen Körper benötigt, brauchen Sie diesen nicht zu benutzen.

Für den Server Antwort Lesen müssen Sie InputStream (R. J. auch zeigen Ihnen Beispiel) wie das verwenden:

try (InputStream inputStream = connection.getInputStream(); 
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();) { 
    byte[] buf = new byte[512]; 
    int read = -1; 
    while ((read = inputStream.read(buf)) > 0) { 
     byteArrayOutputStream.write(buf, 0, read); 
    } 
    System.out.println(new String(byteArrayOutputStream.toByteArray())); 
} 

diese Weise, wenn Sie hängt nicht wollen, gut zu auf Drittteilebibliotheken. Also ich empfehle Ihnen einen Blick auf Jersey - sehr schöne Bibliothek mit sehr viel sehr nützliches Feature.

Client client = JerseyClientBuilder.newBuilder().build(); 
    Response response = client.target("http://host:port"). 
      path("test").path("db-api").path("processor").path("packages"). 
      request().accept(MediaType.APPLICATION_JSON_TYPE).buildGet().invoke(); 
    System.out.println(response.readEntity(String.class)); 
-1
JsonKey jsonkey = objectMapper.readValue(new URL("http://echo.jsontest.com/key/value/one/two"), JsonKey.class); 
System.out.println("jsonkey.getOne() : "+jsonkey.getOne())