Pegar a resposta de um HTTP POST

Olá!

Eu tenho uma classe que faz um POST, e eu consegui enviar mas não entendi como pegar a resposta.

Eu envio um JSON e preciso receber um JSON como resposta, aí eu realmente tô perdida.

Tô usando o GSON e o Apache HTTP 4.5, by the way…

Code:

class SenderPost {
    private HttpResponse response;
    private String gaResponse;

    Integer postLogin(String login, String password) throws UnsupportedEncodingException {
        String send = "{\"login\" : \""+login+"\" , \"password\" : \""+password+"\"}";

        HttpClient client = HttpClientBuilder.create().build();
        CloseableHttpClient clientClose = HttpClients.createDefault();
        HttpPost post = new HttpPost("url_do_post");
        StringEntity entity = new StringEntity(send);

        post.setHeader("Accept", "application/json");
        post.setHeader("Content-Type","application/json");
        post.setHeader("Authorization","Bearer token grandão");
        post.setEntity(entity);

        try {
            response = client.execute(post);
            clientClose.close();
        } catch (IOException e) {
            JOptionPane.showMessageDialog(null,"Não foi possível se conectar aos servidores");
        }
        post.releaseConnection();

        return response.getStatusLine().getStatusCode();
    }
}

Quanto à resposta eu não sei, acredito que outros colegas saberão te ajudar melhor (acho que vi o @staroski comentando sobre algum tópico sobre POST um tempo atrás, mas sem certeza). Mas quanto à sua string send, imagino que isso que vc fez foi em caráter de testes. Se não, é preferível que você serialize ele com o Gson pra enviar ao invés de fazer dessa forma.

É montar uma classe com o “modelo” do que você quer enviar e boas:

@JsonAdapter(DOMSenderAdapter.class)
public class DOMSenderLogin {
    String login;
    String password;

    public String getLogin() {
        return login;
    }

    public String getPassword() {
        return password;
    }

    public DOMSenderLogin(String login, String password) {
        this.login = login;
        this.password = password;
    }
}


class DOMSenderAdapter extends TypeAdapter<DOMSenderLogin>{

    @Override
    public void write(JsonWriter out, DOMSenderLogin value) throws IOException {
        out.beginObject();
        out.name("login").value(value.getLogin());
        out.name("password").value(value.getPassword());
        out.endObject();
    }

    @Override
    public DOMSenderLogin read(JsonReader in) throws IOException {
        return null;
    }
}

(eu pessoalmente gosto muito desse modelo, existem outros but…)

E instancia como

        DOMSenderLogin dsl = new DOMSenderLogin(login,password);
        Gson gson = new Gson();
        String jsonToSend = gson.toJson(dsl);
1 curtida

Obrigado, eu fiz mais ou menos dessa forma…

Alguém sabe sobre a resposta do POST?

Consegui fazer isso aqui (usando Apache IO Utils 4.5):

HttpEntity entidade = response.getEntity();
            String responseString = EntityUtils.toString(entidade, "UTF-8"););

mas acho que não ajuda muito pq eu preciso pegar um dado dali e n sei com T_T alguém??