Не удалось создать заметки о выпуске github с помощью http post call - PullRequest
1 голос
/ 05 июня 2019

Я пытаюсь опубликовать заметки о выпуске github через службу Java REST. Они добились того же, написав скрипт sh и используя curl post call.

Я написал код для выполнения вызова POST с использованием HttpUrlConnection, передав данные JsonObject.

    String postUrl = "host_name/api/v3/repos/"+ userName + "/" + project_name
        + "/releases";

    URL url = new URL(postUrl);

    JSONObject values = new JSONObject();
    JSONObject data = new JSONObject();

    values.put("tag_name", "TEST_TAG1");
    values.put("target_commitish", "master");
    values.put("name", "1.0");
    values.put("body", "TEST Description");
    values.put("draft", false);
    values.put("prerelease", false);
    data.put("data", values);

    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setRequestMethod("POST");
    con.setRequestProperty("Authorization", "token goes here");
    con.setRequestProperty("Content-Type", "application/json");
    con.setRequestProperty("Accept", "application/vnd.github.v3+json");
    con.setDoOutput(true);

    OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
    wr.write(data.toString());
    wr.flush();
    wr.close();

Ожидаемый результат: заметки о выпуске должны публиковаться на github

Ошибка: {"message": "Недопустимый запрос. \ N \ n \" tag_name \ "не был предоставлен.", "Documents_url": "https://developer.github.com/enterprise/2.16/v3/repos/releases/#create-a-release"}

1 Ответ

0 голосов
/ 05 июня 2019

Согласно документации GitHub API для создания релиза, ниже приведен пример requestBody

{
  "tag_name": "v1.0.0",
  "target_commitish": "master",
  "name": "v1.0.0",
  "body": "Description of the release",
  "draft": false,
  "prerelease": false
}

Но в своем коде вы сформировали requestBody в следующем формате

{
  "data": {
    "tag_name": "v1.0.0",
    "target_commitish": "master",
    "name": "v1.0.0",
    "body": "Description of the release",
    "draft": false,
    "prerelease": false
  }
}

Поскольку все поля, необходимые для запроса, находятся в JSONObject values в вашем коде, передайте его напрямую, вместо создания другой вложенности с JSONObject data.

Таким образом, по сути, замените wr.write(data.toString());с wr.write(values.toString());

...