2016-06-22 4 views
1

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

{"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 метод обновления описания в Джире, как показано ниже.

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 или любой другой подход.

+0

Какая ошибка у вас возникла? – GlennV

+0

Как таковая нет ошибки, но я получаю код статуса 400 после вызова метода put() с указанным выше json. –

ответ

1

Ваш JSON выглядит следующим образом:

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

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

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

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

Specifying a "field_id": field_value in the "fields" is a shorthand for a "set" operation in the "update" section. Field should appear either in "fields" or "update", not in both.

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

Относительно этой ошибки:

Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value\n at [Source: [email protected]; line: 1, column: 187]

Ваше описание значение содержит символы новой строки, но это не разрешено использовать те в JSon строке непосредственно. Тебе придется их избежать. См. this post for an example.

+0

Это правда, прежде чем я использовал без «набора», но это не сработало. и вот полный журнал и json без «set». –

+0

{"update": {"summary": [{"set": "CRF-397 - для Virgin Mobile предупреждение должно быть отправлено по электронной почте при возникновении исключения Tier Mismatch."}]}, "Fields": {" описание «:» * Клиенты Ретинированные * * Virgin Mobile * Справочная информация *
Все схемы Великобритании испытывают на разных уровнях некоторые вопросы: * Клиенты оплачивали по ложному премии «}} и вот ответ сообщение. PUT https://ejira.int.syne.com/rest/api/2/issue/ISD-17223 возвращает статус ответа 400 –

+0

400 - это код состояния ответа. Что такое тело ответа? – GlennV

Смежные вопросы