Как использовать разные JSONProperty для сериализации и десериализации с использованием Jackson API? - PullRequest
0 голосов
/ 01 октября 2018

У меня был объект Java " Author ", который затем был реструктурирован, чтобы стать Ararylist из "Author".Авторский объект был сохранен в БД непосредственно как JSON ниже:

{"author":{"id":1,"recordId":0}}

Итак, мое более раннее поле Java было:

private Author author = new Author();

, а новое:

private List<Author> authorList;

ПроблемаВот как я могу написать свой код, чтобы иметь сериализованный объект с authorList , но также необходимо десериализовать старый " Author ".

Я использовал @ JsonProperty для чтения уже сохраненных author данных, но это также сохраняет Arraylist с именем "Автор", который мне нужно назвать authorList

@JsonProperty(value="author")
@JsonDeserialize(using = AuthorDeserializer.class)

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Погуглив вокруг, я нашел решение для этого.Мы можем использовать @JsonAlias, используя последний API Джексона (2.9.7). Поэтому в моем случае я хотел использовать этот псевдоним для десериализации @JsonAlias(value={"author","authorList"}).

JSON Jackson анализирует разные ключи в одном поле

0 голосов
/ 02 октября 2018

Вы также можете добавить эту функцию в свой объектMapper:

DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY
0 голосов
/ 02 октября 2018

Если вам нужно только десериализовать с помощью свойства "author", самый простой способ - просто дать ему метод установки, который он будет искать.

Например:

@JsonProperty("author")
public void setAuthor(Author author) {
    setAuthorList(new ArrayList<>(Collections.singletonList(author)));
}
...