Comment envoyer une requête payload à REST API en java?

je veux récupérer les données JSON à partir de ce qui suit: https://git.eclipse.org/r/#/c/11376 /

URL de la Requête: https://git.eclipse.org/r/gerrit/rpc/ChangeDetailService

Méthode De Demande: POST

En-Têtes De Demande:

Accept:application/json

Content-Type:application/json; charset=UTF-8

Demande De Charge Utile:

{"jsonrpc":"2.0","method":"changeDetail","params":[{"id":11376}],"id":1}

j'ai déjà essayé cette réponse mais je reçois 400 BAD REQUEST .

quelqu'un Peut-il m'aider à régler cette question?

Merci.

22
demandé sur Community 2013-03-22 16:45:06

2 réponses

Le code suivant fonctionne pour moi.

//escape the double quotes in json string
String payload="{\"jsonrpc\":\"2.0\",\"method\":\"changeDetail\",\"params\":[{\"id\":11376}],\"id\":2}";
String requestUrl="https://git.eclipse.org/r/gerrit/rpc/ChangeDetailService";
sendPostRequest(requestUrl, payload);

méthode de mise en œuvre:

public static String sendPostRequest(String requestUrl, String payload) {
    try {
        URL url = new URL(requestUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Accept", "application/json");
        connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
        OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
        writer.write(payload);
        writer.close();
        BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        StringBuffer jsonString = new StringBuffer();
        String line;
        while ((line = br.readLine()) != null) {
                jsonString.append(line);
        }
        br.close();
        connection.disconnect();
    } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
    }
    return jsonString.toString();
}
36
répondu Gangaraju 2016-12-27 12:47:23

j'ai essayé avec un client de repos.

en-Têtes :

  • POST /r/gerrit/rpc/ChangeDetailService HTTP / 1.1
  • animateur: git.eclipse.org
  • User-Agent: Mozilla / 5.0 (Windows NT 5.1; rv: 18.0) Gecko / 20100101 Firefox / 18.0
  • Accept: application /json
  • Accept-Language: null
  • Accept-Encoding: gzip,deflate, sdch
  • accept-charset: ISO-8859-1, utf-8; q=0.7,*; q =0.3
  • Content-Type: application / json; charset=UTF-8
  • Content-Length: 73
  • connexion: keep-alive

ça marche très bien. Je récupère 200 OK avec un bon corps.

pourquoi définissez-vous un code de statut dans votre demande? et la déclaration multiple " Accepter " avec Accept: application/json,application/json,application / jsonrequest. qu'une simple déclaration suffit.

0
répondu Calden 2013-03-22 17:04:47