7

我正在尝试用 Java 进行休息服务调用。我是网络和休息服务的新手。我有返回 json 作为响应的休息服务。我有以下代码,但我认为它不完整,因为我不知道如何使用 json 处理输出。

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

    }

请帮忙。我是休息服务和 json 的新手。提前非常感谢。

4

4 回答 4

3

由于这是一个PUT请求,因此您在这里缺少一些东西:

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

看看这个,对使用 web 服务有一个更清晰的想法。

于 2013-09-27T08:26:24.567 回答
2

您的代码大部分是正确的,但是关于OutputStream. 正如 RJ 所说OutputStream,需要将请求正文传递给服务器。如果您的休息服务不需要任何主体,则无需使用此主体。

要读取您需要使用的服务器响应InputStream(RJ 也向您展示示例),如下所示:

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

如果您不想依赖第三方库,这种方式很好。所以我建议你看看Jersey - 非常好的库,具有大量非常有用的功能。

    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));
于 2016-10-06T16:32:20.687 回答
0

由于您的 Content-Type 是 application/json,因此您可以直接将响应转换为 JSON 对象,例如

JSONObject recvObj = new JSONObject(response);
于 2014-01-04T18:58:02.657 回答
-1
JsonKey jsonkey = objectMapper.readValue(new URL("http://echo.jsontest.com/key/value/one/two"), JsonKey.class);
System.out.println("jsonkey.getOne() : "+jsonkey.getOne())
于 2017-11-20T20:40:34.900 回答