首页 > 解决方案 > 如何配置 Jackson 将一个类型的所有字段转换为另一种类型?

问题描述

如果我有一个A我想要序列化为type 的 POJO 字段B,我可以使用一对Converters 轻松实现这一点:

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

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


为了提供一些上下文,我正在尝试将字段序列java.time.LocalDateTime化为 unix 时间戳,我发现的一种可能的解决方案是使用自定义类型转换器将每个字段java.time.Instant转换为:

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

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

}

标签: javajackson

解决方案


您可以配置ObjectMapperJackson 使用的。通常,您可以配置您希望如何序列化某些类型。对于您的具体问题,您可以尝试以下方法:

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;
}

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


推荐阅读