Изпращане на JSON POST заявка с HttpURLConnection

1. Общ преглед

В този урок ще демонстрираме как да направим JSON POST заявка, използвайки HttpURLConnection .

2. Изграждане на JSON POST заявка с HttpURLConnection

2.1. Създайте URL обект

Нека създадем URL обект с целевия URI низ, който приема JSON данни чрез HTTP POST метод:

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

2.2. Отворете връзка

От горния обект на URL , можем да извикаме метода openConnection , за да получим обекта HttpURLConnection .

Не можем директно да създадем екземпляр на HttpURLConnection , тъй като това е абстрактен клас:

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

2.3. Задайте метода на заявката

За да изпратим POST заявка, ще трябва да зададем свойството на метода на заявка на POST:

con.setRequestMethod("POST");

2.4. Задайте параметъра на заглавката на типа съдържание

Задайте заглавката на заявката „тип съдържание“ на „application / json“, за да изпратите съдържанието на заявката в JSON форма. Този параметър трябва да бъде зададен за изпращане на тялото на заявката във формат JSON.

Ако не го направи, сървърът връща HTTP код на състоянието „400-лоша заявка“.

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

Също така имайте предвид, че споменахме кодирането на набори от знаци заедно с типа съдържание. Това е полезно, ако кодирането на съдържанието на заявката се различава от UTF-8 кодирането, което е кодирането по подразбиране.

2.5. Задайте тип формат на отговора

Задайте заглавката на заявката „Приемам“ на „application / json“, за да прочетете отговора в желания формат:

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

2.6. Уверете се, че връзката ще се използва за изпращане на съдържание

За да изпратим съдържание на заявка, нека активираме свойството doOutput на обекта URLConnection на true .

В противен случай няма да можем да запишем съдържание в изходния поток на връзката:

con.setDoOutput(true);

2.7. Създайте тялото на заявката

След създаване на персонализиран JSON низ:

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

Ще трябва да го напишем:

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

2.8. Прочетете отговора от входния поток

Вземете входния поток, за да прочетете съдържанието на отговора. Не забравяйте да използвате try-with-resources за автоматично затваряне на потока от отговори.

Прочетете цялото съдържание на отговора и отпечатайте крайния низ за отговор:

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

Ако отговорът е във формат JSON, използвайте произволни анализатори на JSON на трети страни, като Jackson library, Gson или org.json, за да анализирате отговора.

3. Заключение

В тази статия видяхме как да направим POST заявка с JSON съдържание на тялото, използвайки HttpURLConnection .

Както винаги, съответните кодови фрагменти могат да бъдат намерени в GitHub