Как обновить описание в Jira через rest api с помощью json

Ниже приведены данные JSON, которые содержат форматированный текст / текст вики. Я хочу передать эти данные в одну из задач Jira через REST API. Здесь Java - это технология, которую я использую.

{"update":{"summary": [{"set": "CRF-397 – For Virgin Mobile, alert must be sent via email when Tier Mismatch exception is encountered."}]},"fields":{"description":{"set":"*Clients Impacted** Virgin Mobile *Background Information*<br>All UK schemes are experiencing at different levels some issues of:* Customers being billed on the wrong premium* Excess Fees paid at point of claim do not correspond to what has been communicated to the customer at the point of sale.* Welcome packs not being issued due to a mismatch *CRF Scope*<br>The scope of this project consists of identifying whenever a new device is communicated to Asurion by a client system and ensuring the data in each of those instances is validated to confirm that the device premium and excess fees are correctly aligned.*User Story Scope*<br>While doing enrollment if any record goes into exception due to Tier is match we have to send consolidated list of such records via email so that Asurion Team can communicate with Virgin Mobile to resolve the Tier Mismatch issues.*Requirement** An email alert must be sent when Tier Mismatch exception is encountered.* Flag based development must be done for triggering an email.* Email must be sent to Client Service, SCM and BI teams* Recipient email IDs must be configurable.* Exception list must contain below records:-      * The list of devices for which there was an exception * The Feature Code sent by Virgin Mobile * The feature code configured in Client Convention for the given device*"}}}

Выше JSON я храню в jiraUpdateFromBuilder.

Я вызываю метод PUT для обновления описания в Jira, как показано ниже.

String _jiraUrl = applicationProperties.get(Constants.JIRAURL)
            + "/rest/api/2/issue/" + reference;
String _jiraUser = applicationProperties.get(Constants.JIRAUSER);
String _jiraPwd = applicationProperties.get(Constants.JIRAPWD);
String auth = new String(Base64.encode(_jiraUser + ":" + _jiraPwd));
int statusCode = invokePutMethod(auth, _jiraUrl.trim(),
            jiraUpdateFromBuilder.toString().trim());

public static int invokePutMethod(String auth, String url, String data) {

    int statusCode = 0;
    try {
        Client client = Client.create();
        WebResource webResource = client.resource(url);
        ClientResponse response = webResource
                .header("Authorization", "Basic " + auth)
                .type("application/json").accept("application/json")
                .put(ClientResponse.class, data);
        statusCode = response.getStatus();
        return statusCode;
    } catch (Exception e) {
        Constants.ERROR.info(Level.INFO, e);

    }
    return statusCode;
}

При этом я не могу обновить описание проблемы в JIRA через какой-либо REST API, потому что здесь я получил статус, отличный от 201. И та же проблема связана со всем полем задачи в JIRA, которое содержит форматированный текст. Пожалуйста, дайте мне знать, может ли JRJC помочь еще, если мне нужно изменить JSON или любой другой подход.


person Asad Ali    schedule 22.06.2016    source источник
comment
Какая у вас ошибка?   -  person GlennV    schedule 22.06.2016
comment
Таким образом, ошибки нет, но я получаю код состояния как 400 после вызова метода put () с указанным выше json.   -  person Asad Ali    schedule 23.06.2016


Ответы (1)


Ваш json выглядит так:

{
  "update": {
    "summary": [
      {
        "set": "CRF-397 ..."
      }
    ]
  },
  "fields": {
    "description": {
      "set": "..."
    }
  }
}

Но часть "поля" не требует использования ключевого слова 'set', поэтому оно должно быть примерно таким:

{
  "update": {
    "summary": [
      {
        "set": "CRF-397 ..."
      }
    ]
  },
  "fields": {
    "description": "..."
  }
}

Если вы проверите документацию для ресурса PUT / issue REST, вы увидите, что это упоминается:

Указание «field_id»: field_value в «fields» является сокращением для операции «set» в разделе «update». Поле должно отображаться либо в «полях», либо в «обновлении», но не в обоих.

Кроме того, вы упомянули, что ваш код состояния ответа был 400, что означает, что это плохой запрос. Тело ответа, вероятно, будет содержать более подробную информацию о том, что не так, поэтому лучше записать и это.

По поводу этой ошибки:

Недопустимый символ без кавычек ((CTRL-CHAR, код 10)): для включения в строковое значение \ n в [Источник: org.apache.catalina.connector.CoyoteInputStream@20e841d2; строка: 1, столбец: 187]

Значение вашего описания содержит символы новой строки, но не разрешено использовать их напрямую в строке json. Тебе придется сбежать от них. См. Пример в этом сообщении.

person GlennV    schedule 23.06.2016
comment
это правда, раньше я использовал без набора, но это не сработало. а вот полный журнал и json без набора. - person Asad Ali; 23.06.2016
comment
{update: {summary: [{set: CRF-397 - Для Virgin Mobile при обнаружении исключения несоответствия уровня необходимо отправлять оповещение по электронной почте.}]}, поля: {description: Затронутые клиенты * Virgin Mobile * Общая информация * ‹br› Все схемы в Великобритании на разных уровнях сталкиваются с некоторыми проблемами: * Клиентам выставляется неверный счет на премию}} и вот ответное сообщение. ВЫПОЛНИТЕ ejira.int.syne.com/rest/api/2 / issue / ISD-17223 вернул статус ответа 400 - person Asad Ali; 23.06.2016
comment
400 - это код состояния ответа. Какое тело ответа? - person GlennV; 23.06.2016
comment
{errorMessages: [Недопустимый символ без кавычек ((CTRL-CHAR, код 10)): необходимо экранировать с помощью обратной косой черты, чтобы включить его в строковое значение \ n в [Источник: org.apache.catalina.connector.CoyoteInputStream@20e841d2; строка: 1, столбец: 187]]} Я думаю, это из-за символа расширенного текста в строке json, например *, |, ~ и т. д., но если это так, то как отправить форматированный текст / текст вики через json? использование обратной косой черты для каждого форматированного текста - утомительный процесс? Любое предложение или альтернатива ?? - person Asad Ali; 24.06.2016
comment
Я обновил свой ответ. Ваше описание содержит символы новой строки, которые вам нужно избежать в строке json. - person GlennV; 24.06.2016