Используйте аннотацию Джексона на поле, чтобы быть корнем для десериализации - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть класс, который я хочу десериализовать в:

@Data
public class Config {

    private Map<String, Item> items;
}

@Data
public class Item {

    private String a;
    private String b;
    private String c;
}

Строка JSON:

{
  "item1": {
    "a": "1",
    "b": "2",
    "c": "3"
  },
  "item2": {
    "a": "10",
    "b": "20",
    "c": "30"
  },
  "item3": {
    "a": "5",
    "b": "6",
    "c": "7"
  }
}

Что я должен использовать для десериализации строки JSON в Config?

РЕДАКТИРОВАТЬ: Добавлено больше элементов в JSON

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Сотрудник помог мне с этим ответом на мой вопрос:

@Data
public class Config {

    private Map<String, Item> items;

    @JsonAnyGetter
    public Map<String, Item> getItems() {
       return items;
    }

    @JsonAnySetter
    public void setItem(final String key, final Item value) {
       items.put(key, value);
    }
}

@Data
public class Item {

    private String a;
    private String b;
    private String c;
}
0 голосов
/ 13 ноября 2018

ОБНОВЛЕНИЕ

Используйте JsonAlias ​​, чтобы получить несколько значений в одном свойстве:

@JsonAlias({"item1", "item2", "item3"})
private Map<String, Item> items;

Аннотация, которую можно использовать дляопределить одно или несколько альтернативных имен для свойства

Более старый ответ на старый вопрос

Добавить JsonProperty с именем item1

@Data
public class Config {
    @JsonProperty("item1")
    private Map<String, Item> items;
}

Аннотация маркера, который можно использовать для определения нестатического метода как «установщика» или «получателя» для логического свойства (в зависимости от его сигнатуры) или поля нестатического объекта дляиспользоваться (сериализовано, десериализовано) как логическое свойство.

РЕДАКТИРОВАТЬ

Обновлено как Map после @michaeak комментария

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...