如何序列化杰克逊Joda日期格式?

时间:2016-12-08 15:46:03

标签: java json serialization jackson apache-flink

我想在flink流处理作业中将对象序列化为Json。在flink作业中,所有对象都需要可序列化。

我正在使用杰克逊来序列化我的物品。

final ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

当我使用它时,我得到以下异常:

java.io.NotSerializableException: com.fasterxml.jackson.datatype.joda.cfg.JacksonJodaDateFormat

如何使包含joda模块的对象映射器可序列化?

1 个答案:

答案 0 :(得分:2)

Flink使用自定义序列化程序序列化数据对象(使用Kryo序列化未知对象)。但是,函数对象(即实现函数接口的类的对象,如MapFunction)将通过Java序列化传送到集群。

此处的问题似乎是您的ObjectMapper类具有非序列化字段。您可以尝试将字段设置为transient,并且:

1)覆盖Java序列化方法或 2)将函数实现为RichFunction并初始化RichFunction.open()方法中的非序列化字段,该方法在处理第一条记录之前调用。