java - 如何配置 Jackson 将一个类型的所有字段转换为另一种类型?
问题描述
如果我有一个A
我想要序列化为type 的 POJO 字段B
,我可以使用一对Converter
s 轻松实现这一点:
@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);
}
}
解决方案
您可以配置ObjectMapper
Jackson 使用的。通常,您可以配置您希望如何序列化某些类型。对于您的具体问题,您可以尝试以下方法:
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;
}
现在,根据您的应用程序设置,您需要在某处注入/提供/配置对象映射器。
推荐阅读
- javascript - 使用 Node 归档多个文件并立即下载
- directx-11 - 顶点着色器和像素着色器有什么关系?
- swift - Swift:带有 OpacityAdjustment 的 GPUImage3 OverlayBlend 的行为不像预期的那样
- tensorflow - 检查目标时出错:预期 dense_18 的形状为 (1,) 但得到的数组的形状为 (10,)
- php - 如何传递外键laravel
- assembly - 汇编 - 'push' 的操作数类型不匹配
- android - Kotlin 1.3.50 Parcelize 未解决的参考错误
- java - 如何对两个 ArrayList 进行排序并将它们放在 Map 中?
- javascript - 如何更改 JQuery 按钮悬停在文本颜色上
- android - 如何验证我的 Google Developer API 是否为 V3?