Faire une requête JSON POST avec HttpURLConnection

1. Vue d'ensemble

Dans ce didacticiel, nous allons montrer comment créer une requête JSON POST à ​​l'aide de HttpURLConnection .

2. Création d' une requête JSON POST avec HttpURLConnection

2.1. Créer un objet URL

Créons un objet URL avec la chaîne URI cible qui accepte les données JSON via la méthode HTTP POST:

URL url = new URL ("//reqres.in/api/users");

2.2. Ouvrir une connexion

À partir de l' objet URL ci-dessus , nous pouvons appeler la méthode openConnection pour obtenir l' objet HttpURLConnection .

Nous ne pouvons pas instancier HttpURLConnection directement, car il s'agit d'une classe abstraite:

HttpURLConnection con = (HttpURLConnection)url.openConnection();

2.3. Définir la méthode de demande

Pour envoyer une requête POST, nous devrons définir la propriété de la méthode de requête sur POST:

con.setRequestMethod("POST");

2.4. Définir le paramètre d'en-tête de type de contenu de la demande

Définissez l' en- tête de requête «content-type» sur «application / json» pour envoyer le contenu de la requête au format JSON. Ce paramètre doit être défini pour envoyer le corps de la requête au format JSON.

En cas d'échec, le serveur renvoie le code d'état HTTP «400-bad request».

con.setRequestProperty("Content-Type", "application/json; utf-8"); 

Notez également que nous avons mentionné l'encodage du jeu de caractères avec le type de contenu. Ceci est utile si le codage du contenu de la demande est différent du codage UTF-8, qui est le codage par défaut.

2.5. Définir le type de format de réponse

Définissez l'en- tête de la requête «Accept» sur «application / json» pour lire la réponse au format souhaité:

con.setRequestProperty("Accept", "application/json");

2.6. Assurez-vous que la connexion sera utilisée pour envoyer du contenu

Pour envoyer le contenu de la requête , activons la propriété doOutput de l'objet URLConnection sur true .

Sinon, nous ne serons pas en mesure d'écrire du contenu dans le flux de sortie de la connexion:

con.setDoOutput(true);

2.7. Créer le corps de la demande

Après avoir créé une chaîne JSON personnalisée:

String jsonInputString = "{"name": "Upendra", "job": "Programmer"}";

Nous aurions besoin de l'écrire:

try(OutputStream os = con.getOutputStream()) { byte[] input = jsonInputString.getBytes("utf-8"); os.write(input, 0, input.length); }

2.8. Lire la réponse du flux d'entrée

Obtenez le flux d'entrée pour lire le contenu de la réponse. N'oubliez pas d'utiliser try-with-resources pour fermer automatiquement le flux de réponse.

Lisez tout le contenu de la réponse et imprimez la chaîne de réponse finale:

try(BufferedReader br = new BufferedReader( new InputStreamReader(con.getInputStream(), "utf-8"))) { StringBuilder response = new StringBuilder(); String responseLine = null; while ((responseLine = br.readLine()) != null) { response.append(responseLine.trim()); } System.out.println(response.toString()); }

Si la réponse est au format JSON, utilisez des analyseurs JSON tiers tels que la bibliothèque Jackson , Gson ou org.json pour analyser la réponse.

3. Conclusion

Dans cet article, nous avons vu comment effectuer une requête POST avec un corps de contenu JSON à l'aide de HttpURLConnection .

Comme toujours, des extraits de code pertinents peuvent être trouvés sur GitHub