Hacer una solicitud JSON POST con HttpURLConnection

1. Información general

En este tutorial, demostraremos cómo hacer una solicitud JSON POST usando HttpURLConnection .

2. Creación de una solicitud POST JSON con HttpURLConnection

2.1. Crear un objeto URL

Creemos un objeto URL con la cadena URI de destino que acepta los datos JSON a través del método HTTP POST:

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

2.2. Abrir una conexión

Desde el objeto URL anterior , podemos invocar el método openConnection para obtener el objeto HttpURLConnection .

No podemos instanciar HttpURLConnection directamente, ya que es una clase abstracta:

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

2.3. Establecer el método de solicitud

Para enviar una solicitud POST, tendremos que establecer la propiedad del método de solicitud en POST:

con.setRequestMethod("POST");

2.4. Establecer el parámetro de encabezado de tipo de contenido de solicitud

Establezca el encabezado de la solicitud "content-type" en "application / json" para enviar el contenido de la solicitud en formato JSON. Este parámetro debe configurarse para enviar el cuerpo de la solicitud en formato JSON.

Si no lo hace, el servidor devuelve el código de estado HTTP "400 solicitud incorrecta".

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

Además, tenga en cuenta que hemos mencionado la codificación del juego de caracteres junto con el tipo de contenido. Esto es útil si la codificación del contenido de la solicitud es diferente de la codificación UTF-8, que es la codificación predeterminada.

2.5. Establecer el tipo de formato de respuesta

Establezca el encabezado de la solicitud "Aceptar" en "application / json" para leer la respuesta en el formato deseado:

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

2.6. Asegúrese de que la conexión se utilizará para enviar contenido

Para enviar contenido de la petición, vamos a permitir la URLConnection del objeto doOutput propiedad a cierto .

De lo contrario, no podremos escribir contenido en el flujo de salida de la conexión:

con.setDoOutput(true);

2.7. Crear el cuerpo de la solicitud

Después de crear una cadena JSON personalizada:

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

Necesitaríamos escribirlo:

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

2.8. Leer la respuesta del flujo de entrada

Obtenga el flujo de entrada para leer el contenido de la respuesta. Recuerde usar try-with-resources para cerrar el flujo de respuesta automáticamente.

Lea todo el contenido de la respuesta e imprima la cadena de respuesta final:

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 respuesta está en formato JSON, use cualquier analizador JSON de terceros, como la biblioteca Jackson , Gson u org.json para analizar la respuesta.

3. Conclusión

En este artículo, vimos cómo realizar una solicitud POST con el cuerpo del contenido JSON usando HttpURLConnection .

Como siempre, los fragmentos de código relevantes se pueden encontrar en GitHub