如何使用Jackson API在序列化和反序列化上使用不同的JSONProperty?

时间:2018-10-01 06:41:01

标签: java serialization jackson deserialization objectmapper

我有一个Java对象“ Author ”,然后将其重组为“ Author”的Ararylist。 Author对象在下面直接以JSON格式保存在数据库中:

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

所以我以前的Java字段是:

private Author author = new Author();

新的是:

private List<Author> authorList;

问题是我如何编写代码以具有带有 authorList 的序列化对象,但是还需要反序列化旧的“ Author ”。

我使用 @JsonProperty 读取已经保存的author数据,但这也保存了名为“ Author”的Arraylist,我需要将其命名为authorList

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

3 个答案:

答案 0 :(得分:0)

如果只需要使用“ author”属性进行反序列化,最简单的方法就是为其提供将要查找的setter方法。

例如:

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

答案 1 :(得分:0)

在Google上搜索,我已经找到解决方案。 我们可以使用最新的Jackson API(2.9.7)使用@JsonAlias 因此,在我的情况下,我希望使用该别名来反序列化@JsonAlias(value={"author","authorList"})

JSON Jackson parse different keys into same field

答案 2 :(得分:0)

您还可以将此功能添加到objectMapper:

DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY