Я хочу использовать Джексона, чтобы десериализовать мой JSON из Jira в набор POJO. У меня есть большая часть того, что я хочу, чтобы работать красиво, теперь мне просто нужно декодировать значения настраиваемых полей.
Мой входной JSON выглядит так:
{
"expand": "renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations",
"id": "104144",
"self": "https://jira.internal.net/rest/api/2/issue/104144",
"key": "PRJ-524",
"fields": {
"summary": "Redo unit tests to load from existing project",
"components": [],
"customfield_10240": {
"self": "https://jira.internal.net/rest/api/2/customFieldOption/10158",
"value": "Normal",
"id": "10158"
}
}
Я могу тривиально загрузить сводку и компоненты, поскольку заранее знаю, как называются эти элементы JSON, и могу определить их в моем POJO:
@JsonIgnoreProperties({ "expand", "self", "id", })
public class JiraJson
{
private JiraFields fields;
private String key;
public JiraFields getFields()
{
return fields;
}
public String getKey()
{
return key;
}
public void setFields(JiraFields newFields)
{
fields = newFields;
}
public void setKey(String newKey)
{
key = newKey;
}
}
И аналогично для JiraFields
:
@JsonIgnoreProperties({ "issuetype", "priority", "status" })
public class JiraFields
{
private List<JiraComponent> components;
private String summary;
public List<JiraComponent> getComponents()
{
return components;
}
public String getSummary()
{
return summary;
}
public void setComponents(List<JiraComponent> newComponents)
{
components = newComponents;
}
public void setSummary(String newSummary)
{
summary = newSummary;
}
}
Однако поле custom_10240
на самом деле отличается в зависимости от того, с какой системой Jira она работает, на одной она custom_10240
, на другой - custom_10345
, поэтому я не могу жестко закодировать это в POJO. Используя другой вызов, можно узнать во время выполнения, до начала десериализации, как называется поле, но это невозможно во время компиляции.
Предполагая, что я хочу отобразить поле value
в String
на JiraFields
с именем Importance
, как мне это сделать? Или, может быть, проще, как отобразить этот Importance
на JiraCustomField
класс?