Een JSON POST-verzoek maken met HttpURLConnection

1. Overzicht

In deze zelfstudie laten we zien hoe u een JSON POST-verzoek kunt maken met HttpURLConnection.

2. Het bouwen van een JSON POST-aanvraag met HttpURLConnection

2.1. Maak een URL Voorwerp

Laten we een URL object met de doel-URI-tekenreeks die de JSON-gegevens accepteert via de HTTP POST-methode:

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

2.2. Open een verbinding

Uit het bovenstaande URL object, kunnen we een beroep doen op de openConnection methode om de HttpURLConnection voorwerp.

We kunnen niet instantiëren HttpURLConnection direct, want het is een abstracte klasse:

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

2.3. Stel de verzoekmethode in

Om een ​​POST-verzoek te verzenden, moeten we de eigenschap verzoekmethode instellen op POST:

con.setRequestMethod ("POST");

2.4. Stel de parameter voor de koptekst van het inhoudstype van de aanvraag in

Set "Content-type" verzoek header naar "Application / json" om de inhoud van het verzoek in JSON-vorm te verzenden. Deze parameter moet worden ingesteld om de hoofdtekst van het verzoek in JSON-indeling te verzenden.

Als dit niet lukt, retourneert de server de HTTP-statuscode "400-bad request".

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

Merk ook op dat we charset-codering hebben genoemd samen met het inhoudstype. Dit is handig als de codering van de inhoud van het verzoek verschilt van de UTF-8-codering, wat de standaardcodering is.

2.5. Stel het type antwoordformaat in

Stel de "Aanvaarden" verzoek header naar "Application / json" om het antwoord in het gewenste formaat te lezen:

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

2.6. Zorg ervoor dat de verbinding wordt gebruikt om inhoud te verzenden

Om inhoud van verzoeken te verzenden, laten we het URLConnection voorwerpen doOutput eigendom aan waar.

Anders kunnen we geen inhoud naar de verbindingsuitvoerstroom schrijven:

con.setDoOutput (true);

2.7. Maak de aanvraagtekst

Na het maken van een aangepaste JSON-string:

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

We zouden het moeten schrijven:

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

2.8. Lees het antwoord van de invoerstroom

Haal de invoerstroom op om de inhoud van het antwoord te lezen. Vergeet niet om try-with-resources te gebruiken om de responsstream automatisch te sluiten.

Lees de volledige antwoordinhoud en druk de laatste antwoordstring af:

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

Als het antwoord in JSON-indeling is, gebruik dan JSON-parsers van derden, zoals Jackson bibliotheek, Gson, of org.json om het antwoord te ontleden.

3. Conclusie

In dit artikel hebben we gezien hoe u een POST-verzoek kunt indienen met JSON-inhoud met HttpURLConnection.

Zoals altijd zijn relevante codefragmenten te vinden op GitHub