Esecuzione di una richiesta POST JSON con HttpURLConnection

1. Panoramica

In questo tutorial, dimostreremo come effettuare una richiesta POST JSON utilizzando HttpURLConnection .

2. Creazione di una richiesta POST JSON con HttpURLConnection

2.1. Crea un oggetto URL

Creiamo un oggetto URL con la stringa URI di destinazione che accetta i dati JSON tramite il metodo HTTP POST:

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

2.2. Apri una connessione

Dall'oggetto URL sopra , possiamo invocare il metodo openConnection per ottenere l' oggetto HttpURLConnection .

Non possiamo istanziare HttpURLConnection direttamente, poiché è una classe astratta:

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

2.3. Imposta il metodo di richiesta

Per inviare una richiesta POST, dovremo impostare la proprietà del metodo di richiesta su POST:

con.setRequestMethod("POST");

2.4. Impostare il parametro dell'intestazione del tipo di contenuto della richiesta

Imposta l' intestazione della richiesta "content-type" su "application / json" per inviare il contenuto della richiesta in formato JSON. Questo parametro deve essere impostato per inviare il corpo della richiesta in formato JSON.

In caso contrario, il server restituisce il codice di stato HTTP "400-bad request".

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

Inoltre, tieni presente che abbiamo menzionato la codifica del set di caratteri insieme al tipo di contenuto. Ciò è utile se la codifica del contenuto della richiesta è diversa dalla codifica UTF-8, che è la codifica predefinita.

2.5. Imposta il tipo di formato della risposta

Imposta l' intestazione della richiesta "Accetta" su "applicazione / json" per leggere la risposta nel formato desiderato:

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

2.6. Assicurati che la connessione venga utilizzata per inviare contenuti

Per inviare il contenuto della richiesta, abilitiamo la proprietà doOutput dell'oggetto URLConnection su true .

In caso contrario, non saremo in grado di scrivere contenuto nel flusso di output della connessione:

con.setDoOutput(true);

2.7. Crea il corpo della richiesta

Dopo aver creato una stringa JSON personalizzata:

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

Avremmo bisogno di scriverlo:

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

2.8. Leggi la risposta da Input Stream

Ottieni il flusso di input per leggere il contenuto della risposta. Ricorda di utilizzare try-with-resources per chiudere automaticamente il flusso di risposta.

Leggi l'intero contenuto della risposta e stampa la stringa di risposta 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()); }

Se la risposta è in formato JSON, utilizza qualsiasi parser JSON di terze parti come la libreria Jackson , Gson o org.json per analizzare la risposta.

3. Conclusione

In questo articolo, abbiamo visto come effettuare una richiesta POST con il corpo del contenuto JSON utilizzando HttpURLConnection .

Come sempre, gli snippet di codice pertinenti possono essere trovati su GitHub