Как отправить полезную нагрузку запроса на API REST в java?

Я хочу получить данные JSON из следующих источников: https://git.eclipse.org/r/#/c/11376/

URL запроса: https://git.eclipse.org/r/gerrit/rpc/ChangeDetailService

Способ запроса: POST

Заголовки запроса:

Accept:application/json

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

Запросить полезную нагрузку:

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

Я уже пробовал этот ответ, но я получаю 400 BAD REQUEST.

Может кто-нибудь помочь мне разобраться с этим?

Благодарю.

Ответы

Ответ 1

Следующий код работает для меня.

//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);

Реализация метода:

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();
        return jsonString.toString();
    } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
    }

}

Ответ 2

Я попробовал с клиентом отдыха.

Заголовки:

  • POST/r/gerrit/rpc/ChangeDetailService HTTP/1.1
  • Хост: git.eclipse.org
  • Пользователь-агент: Mozilla/5.0 (Windows NT 5.1; rv: 18.0) Gecko/20100101 Firefox/18.0
  • Принять: 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; кодировка = UTF-8
  • Content-Length: 73
  • Соединение: keep-alive

он отлично работает. Я получаю 200 OK с хорошим телом.

Почему вы устанавливаете код состояния в своем запросе? и множественное объявление " Принять" с помощью Accept: application/json, application/json, application/jsonrequest. достаточно просто сделать выражение.