在我的项目中,我有以下 ObjectMapper 类:
public class ObjectMapperImpl extends ObjectMapper {
public ObjectMapperImpl() {
super();
configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
registerModule(new JodaModule());
setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
}
}
如您所见,我正在使用 JodaModule 序列化/反序列化 org.joda.time.DateTime
但是我的日期格式在序列化过程中并不适用,它会产生这样的日期:2013-06-15T09:50:08.541Z
我看了一下 JodaModule,我看到它注册如下
addSerializer(DateTime.class, new DateTimeSerializer());
public final class DateTimeSerializer
extends JodaSerializerBase<DateTime>
{
public DateTimeSerializer() { super(DateTime.class); }
@Override
public void serialize(DateTime value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonGenerationException
{
if (provider.isEnabled(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)) {
jgen.writeNumber(value.getMillis());
} else {
jgen.writeString(value.toString());
}
}
@Override
public JsonNode getSchema(SerializerProvider provider, java.lang.reflect.Type typeHint)
{
return createSchemaNode(provider.isEnabled(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
? "number" : "string", true);
}
}
所以根据这段代码,我可以说它从不使用配置中定义的日期格式,它只是使用toString()
方法将其转换为字符串
@ToString
public String toString() {
return ISODateTimeFormat.dateTime().print(this);
}
日期格式是硬编码的,它是 ISO。
所以我猜不可能在 ObjectMapper 配置中为 joda 的 DateTime 设置我自己的日期格式。
这是否意味着唯一的解决方案是摆脱 JodaModule 并创建我的自定义序列化器/反序列化器以支持日期格式?
寻找您的意见。谢谢你。