Как захватить http-ответ как объект Json в Java - PullRequest
0 голосов
/ 06 марта 2019

Я хочу отправить HTTP-запрос с помощью CloseableHttpClient, а затем записать тело ответа в объект JSON, чтобы я мог получить доступ к значениям ключа, например: responseJson.name и т. Д.

Я могу захватить тело ответакак строка в порядке, используя код ниже, но как я могу захватить его как объект JSON?

CloseableHttpClient httpClient = HttpClients.createDefault();
URIBuilder builder = new URIBuilder();

    builder.setScheme("https").setHost("login.xxxxxx").setPath("/x/oauth2/token");
    URI uri = builder.build();
    HttpPost request = new HttpPost(uri);
    HttpEntity entity = MultipartEntityBuilder.create()
            .addPart("grant_type", grantType)
            .build();
    request.setEntity(entity);
    HttpResponse response = httpClient.execute(request);
    assertEquals(200, response.getStatusLine().getStatusCode());

    //This captures and prints the response as a string
    HttpEntity responseBodyentity = response.getEntity();
    String responseBodyString = EntityUtils.toString(responseBodyentity);
    System.out.println(responseBodyString);

Ответы [ 3 ]

2 голосов
/ 06 марта 2019

вы можете набрать приведенную строку ответа в JSON Object.

Строка в JSON с использованием Jackson с com.fasterxml.jackson.databind:

Предполагается, что ваша json-строка выглядит следующим образом: jsonString = "{" name ":" sample "}"

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(responseBodyString);
String phoneType = node.get("name").asText();

Использование библиотеки org.json :

JSONObject jsonObj = new JSONObject(responseBodyString);
String name = jsonObj.get("name");
0 голосов
/ 06 марта 2019

Что бы я порекомендовал, так как у вас уже есть JSON в виде строки, напишите метод, который использует объект Google Splitter, и определите символы, по которым вы хотите разбить пары KV.

Например, я сделал то же самое для пар KV, как строку, поступающую из приложения Spring Boot и разделенную на основе специальных символов ',':

private Map<String, String> splitToMap(String in) {

    return Splitter.on(", ").withKeyValueSeparator("=").split(in);
}

замените, например, на ":", и это должно выбратьдо вашей строки JSON в виде пар KV.

Ниже приведена зависимость Mvn от Splitter:

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>21.0</version>
</dependency>

надеюсь, это поможет вам начать.

0 голосов
/ 06 марта 2019

Просто преобразуйте строку в JSONObject, затем получите значение для name

JSONObject obj = new JSONObject(responseBodyString);
System.out.println(obj.get("name"));
...