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");
3 Réponses :
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();
Un grand merci Sree. J'ai utilisé JSONObject de votre 2ème exemple. J'ai dû ajouter ceci à mon POM:
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"));
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:
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.
Quelle bibliothèque JSON utilisez-vous?