1. Обзор
В этом руководстве мы покажем, как сделать запрос JSON POST с помощью HttpURLConnection
.
2. Создание запроса JSON POST с помощью HttpURLConnection
2.1. Создать объект URL
Давайте создадим объект URL
с целевой строкой URI, которая принимает данные JSON через метод HTTP POST:
URL url = new URL ("https://reqres.in/api/users");
2.2. Открыть соединение
Из приведенного выше объекта URL
мы можем вызвать метод openConnection
, чтобы получить объект HttpURLConnection
.
Мы не можем создать экземпляр HttpURLConnection
напрямую, так как это абстрактный класс:
HttpURLConnection con = (HttpURLConnection)url.openConnection();
2.3. Установите метод запроса
Чтобы отправить запрос POST, нам нужно установить для свойства метода запроса значение POST:
con.setRequestMethod("POST");
2.4. Установите параметр заголовка Content-Type запроса
Установите для заголовка запроса «content-type» значение
«application/json»
, чтобы отправить содержимое запроса в формате JSON. Этот параметр должен быть установлен для отправки тела запроса в формате JSON.
В противном случае сервер возвращает код состояния HTTP «400-bad request»:
con.setRequestProperty("Content-Type", "application/json");
2.5. Установить тип формата ответа
Установите заголовок запроса «Accept» на
«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, такие как библиотека Джексона ,
Gson
или org.json
, для анализа ответа.
3. Заключение
В этой статье мы узнали, как сделать запрос POST с телом содержимого JSON с помощью HttpURLConnection
.
Как всегда, соответствующие фрагменты кода можно найти на GitHub.