Прочитайте массив JSON как перечисления с типом, основанным на свойстве.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Прочитайте массив JSON как перечисления с типом, основанным на свойстве.

Сообщение Anonymous »

Мой ввод в формате JSON:

Код: Выделить всё

[
{
"id": "age",
"name": "Age",
"type": "string",
"value": "730 days +"
},
{
"id": "v2Score",
"name": "V2 Score",
"type": "number",
"value": 5.9
},
{
"id": "maturity",
"name": "Maturity",
"type": "string",
"value": "High"
},
{
"id": "coverage",
"name": "Product Coverage",
"type": "string",
"value": "Low"
},
{
"id": "threat_intensity",
"name": "Threat Intensity",
"type": "string",
"value": "Very Low"
},
{
"id": "threat_recency",
"name": "Threat Recency",
"type": "string",
"value": "No recorded events"
},
{
"id": "threat_sources",
"name": "Threat Sources",
"type": "string",
"value": "No recorded events"
}
]
и у меня есть ряд перечислений, таких как Возраст, Зрелость, Охват. Я хочу использовать поле id, чтобы определить, какой тип перечисления представляет этот объект, и поле value, чтобы определить, какое перечисление этого типа выбрать. Есть ли способ сделать это с помощью аннотаций, например @JsonTypeInfo? Кроме того, хотя я не ожидаю отсутствия каких-либо перечислений, мне хотелось бы иметь возможность передавать «отсутствующие» перечисления как null (в том числе для пустого входного массива [ ]). Мне также не нужны элементы v2Score или Threat_sources. На данный момент данные, возвращаемые из этого API, либо будут включать все эти элементы, либо не будут включать ни одного из этих элементов, хотя я не гарантирую, что это на 100% так.
Я добрался до этого, прежде чем застрял на что делать

Код: Выделить всё

@JsonCreator
Context(
@JsonProperty("age") Age age,
@JsonProperty("coverage") Coverage coverage
// rest of params similar
) {
// basic constructor
}
Для приведенных выше входных данных необходимо создать следующий объект:

Код: Выделить всё

context.getAge() // Age.MORE_THAN_TWO_YEARS
context.getMaturity() // Maturity.HIGH
context.getCoverage() // Coverage.LOW
context.getThreatIntensity() // ThreatIntensity.VERY_LOW
context.getThreatRecency() // ThreatRecency.NONE
Не все элементы входного массива являются (логическими) перечислениями, но все элементы, которые меня интересуют, являются перечислениями.
Я полагаю, мне нужно каким-то образом использовать @JsonTypeInfo для каждого аргумента конструктора?
Я также знаю, как создать для этого собственный десериализатор, но делаю это делает код гораздо более хрупким, особенно если он будет расширен или изменен в будущем.

Подробнее здесь: https://stackoverflow.com/questions/786 ... n-property
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»