Fazendo uma solicitação JSON POST com HttpURLConnection

Fazendo uma solicitação JSON POST com HttpURLConnection

1. Visão geral

Neste tutorial, demonstraremos como fazer uma solicitação POSTJSON usandoHttpURLConnection.

2. Construindo uma solicitação JSON POST comHttpURLConnection

2.1. Criar objeto AURL

Vamos criar um objetoURL com a string URI de destino que aceita os dados JSON por meio do método HTTP POST:

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

2.2. Abra uma conexão

A partir do objetoURL acima, podemos invocar o métodoopenConnection para obter o objetoHttpURLConnection.

Não podemos instanciarHttpURLConnection diretamente, pois é uma classe abstrata:

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

2.3. Defina o método de solicitação

Para enviar uma solicitação POST, teremos que definir a propriedade do método de solicitação como POST:

con.setRequestMethod("POST");

2.4. Defina o parâmetro Solicitar cabeçalho do tipo de conteúdo

Set “content-type” request header to “application/json” para enviar o conteúdo da solicitação no formato JSON. Este parâmetro deve ser configurado para enviar o corpo da solicitação no formato JSON.

Caso contrário, o servidor retornará o código de status HTTP "400-bad request".

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

Além disso, observe que mencionamos a codificação do conjunto de caracteres junto com o tipo de conteúdo. Isso é útil se a codificação do conteúdo da solicitação for diferente da codificação UTF-8, que é a codificação padrão.

2.5. Definir tipo de formato de resposta

Defina o cabeçalho da solicitação“Accept” para“application/json” para ler a resposta no formato desejado:

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

2.6. Verifique se a conexão será usada para enviar conteúdo

Para enviar o conteúdo da solicitação, vamos habilitar a propriedadedoOutput do objetoURLConnection paratrue.

Caso contrário, não poderemos gravar conteúdo no fluxo de saída da conexão:

con.setDoOutput(true);

2.7. Crie o corpo da solicitação

Após criar uma sequência JSON customizada:

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

Precisamos escrever:

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

2.8. Leia a resposta do fluxo de entrada

Obtenha o fluxo de entrada para ler o conteúdo da resposta. Lembre-se de usar o try-with-resources para fechar o fluxo de resposta automaticamente.

Leia todo o conteúdo da resposta e imprima a sequência de respostas 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());
}

Se a resposta estiver no formato JSON, use qualquer analisador JSON de terceiros, como a bibliotecaJackson,Gson ouorg.json para analisar a resposta.

3. Conclusão

Neste artigo, vimos como fazer uma solicitação POST com corpo de conteúdo JSON usandoHttpURLConnection.

Como sempre, trechos de código relevantes podem ser encontradosover on GitHub