2013-09-27 12 views
6

Próbuję wykonać wywołanie usługi odpoczynku w Javie. Jestem nowy w serwisie internetowym i usługach wypoczynkowych. Mam usługę spoczynku, która zwraca json jako odpowiedź. Mam następujący kod, ale myślę, że jest niekompletny, ponieważ nie wiem jak przetwarzać dane wyjściowe za pomocą json.Uzyskiwanie odpowiedzi JSON w ramach odpoczynku połączenia w Javie

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

    } 

Proszę o pomoc. Jestem nowy w usługach spoczynku i json. Z góry dziękuję.

+0

Jeśli używasz Spring, to sprawia, że ​​życie łatwe. Wykona on żądanie HTTP, skonwertuje odpowiedź HTTP na wybrany typ obiektu i zwróci ten obiekt. https://spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate –

Odpowiedz

2

Ponieważ jest to PUT prośba tracisz kilka rzeczy tutaj:

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. 
} 

Wystarczy popatrzeć na this mieć bardziej wyraźny pomysł na uderzenia webservices.

0

Ponieważ Content-Type jest application/json, można bezpośrednio rzutować odpowiedź do obiektu JSON na przykład

JSONObject recvObj = new JSONObject(response); 
2

kod jest przeważnie poprawne, ale nie jest pomyłka o OutputStream. Jako, że R.J powiedział, że OutputStream jest wymagane, aby przekazać ciało żądanie na serwer. Jeśli usługa wypoczynku nie wymaga żadnego ciała, nie trzeba jej używać.

Do odczytu odpowiedzi serwera trzeba użyć InputStream (R.J również pokazać przykład) tak:

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

Ten sposób jest dobry, jeśli nie chcą zależy od bibliotek innych części. Dlatego polecam zapoznać się z Jersey - bardzo ładną biblioteką z ogromną ilością bardzo przydatnej funkcji.

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()) 
Powiązane problemy