如何配置Jackson以将一种类型的所有字段转换为另一种类型?

时间:2018-07-11 14:18:59

标签: java jackson

如果我有一个A类型的POJO字段要序列化为B类型,我可以通过一对Converter轻松实现:

@JsonSerialize(converter=ConvA2B.class)
@JsonDeserialize(converter=ConvB2A.class)
private A field; 

但是,如果我希望像这样对待所有POJO中的所有该类型的字段怎么办?是否有全局转换器配置?


为了提供一些背景信息,我正在尝试serialize java.time.LocalDateTime fields as unix timestamps,发现的一种可能的解决方案是使用自定义类型转换器将每个文件转换为java.time.Instant,例如:

public static class Conv extends StdConverter<LocalDateTime, Instant> {

    @Override
    public Instant convert(LocalDateTime value) {
        return value.toInstant(ZoneOffset.UTC);
    }

}

1 个答案:

答案 0 :(得分:1)

您可以配置Jackson使用的ObjectMapper。通常,您可以配置想要序列化某些类型的方式。对于您的具体问题,您可以尝试以下操作:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

...

private ObjectMapper createObjectMapper() {
    final ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new JavaTimeModule());
    mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    return mapper;
}

现在,根据您的应用程序设置,您需要在某个地方注入/提供/配置对象映射器。