Jackson将多个属性的自定义反序列化器转换为值对象类

时间:2018-01-09 14:50:50

标签: java json jackson deserialization json-deserialization

让我们说我遵循平坦的JSON结构:

{
    "name": "name",
    "validFrom": "2018-01-09",
    "validTo": "2018-01-10",
}

MyPojo类:

public class MyPojo {
    private String name;

    @JsonUnwrapped
    private Validity validity;
}

Validity类:

public class Validity {
    private LocalDate validFrom;
    private LocalDate validTo;
}

我创建了自定义展开序列化程序,它运行正常。

我想将上面的JSON反序列化为MyPojo类,其中包含Validity值对象。

如何实施Validity的自定义反序列化工具?

@JsonProperty不起作用,因为我想为Validity构建使用2个Json属性

1 个答案:

答案 0 :(得分:0)

在这种情况下,我建议使用构造函数,比自定义反序列化器简单得多,如:

@JsonCreator
public MyPojo(@JsonProperty("name") String name,
              @JsonProperty("validFrom") String validFrom,
              @JsonProperty("validTo") String validTo) {
    this.name = name;
    this.validity = new Validity(validFrom, validTo);
}

暗示LocalDate是从上面的String解析的,但杰克逊可能会解析它们。

如果您将Java 8与parameter names module

一起使用,则可以跳过上面的注释

这需要对有效性进行额外注释,请参阅开放杰克逊问题here

@JsonProperty(access = JsonProperty.Access.READ_ONLY)
@JsonUnwrapped
private Validity validity;