1
votes

Comment capturer la réponse http en tant qu'objet Json en Java

Je souhaite envoyer une requête HTTP en utilisant CloseableHttpClient, puis capturer le corps de la réponse dans un objet JSON afin de pouvoir accéder aux valeurs clés comme celle-ci: responseJson.name etc

Je peux capturer le corps de la réponse sous forme de chaîne ok en utilisant le code ci-dessous mais comment puis-je le capturer en tant qu'objet JSON?

    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);
CloseableHttpClient httpClient = HttpClients.createDefault();
URIBuilder builder = new URIBuilder();

    builder.setScheme("https").setHost("login.xxxxxx").setPath("/x/oauth2/token");


1 commentaires

Quelle bibliothèque JSON utilisez-vous?


3 Réponses :


3
votes

vous pouvez taper cast votre chaîne de réponse en objet JSON.

Chaîne en JSON en utilisant Jackson avec com.fasterxml.jackson.databind:

En supposant que votre chaîne json représente comme ceci: jsonString = "{" name ":" sample "}"

JSONObject jsonObj = new JSONObject(responseBodyString);
String name = jsonObj.get("name");

Utilisation de org.json bibliothèque:

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


1 commentaires

Un grand merci Sree. J'ai utilisé JSONObject de votre 2ème exemple. J'ai dû ajouter ceci à mon POM: org.json json 20180813



0
votes

Il suffit de convertir la chaîne en JSONObject puis d'obtenir la valeur de name

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


2 commentaires

Merci Deadpool. J'ai essayé cela, mais il est impossible de résoudre le symbole «JSONObject». J'ai un "JsonObject" disponible sur com.google.json mais rien n'est reconnu pour JSONObject. Dois-je installer un JAR ou ajouter quelque chose à mon POM pour y accéder?


Ah trouvé maintenant, j'ai ajouté ceci à mon POM: org.json json 20180813



0
votes

Ce que je recommanderais, c'est que puisque vous avez déjà votre JSON sous forme de chaîne, écrivez une méthode qui utilise l'objet google 'Splitter' et définissez les caractères sur lesquels vous souhaitez diviser en paires KV.

Par exemple J'ai fait la même chose pour les paires KV en tant que chaîne provenant d'une application Spring Boot et divisée en fonction des caractères spéciaux ',':

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

remplacer par par exemple ":" et cela devrait prendre votre chaîne JSON sous forme de paires KV.

Dépendance Splitter Mvn ci-dessous:

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

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

j'espère que cela vous aidera à démarrer.


0 commentaires