Как избежать конфликтующих определений геттера для свойства с одинаковым именем атрибута с другим типом данных

Есть ли способ избежать конфликтующих определений геттера для свойства «память», где оно генерируется во время выполнения, где мы не можем изменить структуру,

{
"memory": "not_available"
}

{
"memory": {
    "data1": 0,
    "data2": 2,
}
}

У меня есть 1 свойство с другим типом данных и как обрабатывать сценарий, в котором я использую fastxml api

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "memory"
})

public class MyMemoryData{
     @JsonProperty("memory")
     private Memory memory;

     @JsonProperty("memory")      
     private String memoryValue;
     }

Получение приведенных ниже определений получателя, конфликтующих с исключениями, для свойства «память»:


person user3428736    schedule 05.03.2020    source источник
comment
Это очень плохой дизайн, иметь 2 атрибута с одинаковыми именами.   -  person Trishul Singh Choudhary    schedule 05.03.2020
comment
Я понимаю, но этот дизайн нельзя изменить, если он автоматически генерируется с сервера, и поэтому требуется решение для его решения.   -  person user3428736    schedule 05.03.2020


Ответы (1)


Вы уверены, что вам действительно нужны два разных поля для поля «память»? Я имею в виду, можете ли вы использовать только личную память Memory; и установить нуль, если он «недоступен»?

Если да ("not_available" == null), вы можете написать свой собственный десериализатор Джексона для поля памяти, который будет реализовывать логику: если значение "not_available", возвращает null, иначе проанализируйте объект.

person Maxim Popov    schedule 05.03.2020
comment
Вы выделяете, чтобы использовать приведенное ниже: @JsonInclude(JsonInclude.Include.NON_NULL) @JsonPropertyOrder({ memory }) public class MyMemoryData{ @JsonProperty(memory) (not_available == null) private Memory memory; } - person user3428736; 05.03.2020
comment
Да, я точно не знаю ваш вариант использования, но похоже, что он действителен @JsonInclude(JsonInclude.Include.NON_NULL) @JsonPropertyOrder({ "memory" }) public class MyMemoryData{ @JsonProperty("memory") private Memory memory; // null if 'not_available' } - person Maxim Popov; 05.03.2020