Jackson 2.2.2 ObjectMapper日期格式不适用于Joda DateTime

时间:2013-06-15 10:20:32

标签: java json jackson

在我的项目中,我遵循了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。

因为我猜想在joda的DateTime的ObjectMapper配置中设置我自己的dateformat是不可能的。

这是否意味着只有解决方案是摆脱JodaModule并创建我的自定义序列化器/反序列化器以支持日期格式?

寻找你的oppinions。 谢谢。

0 个答案:

没有答案