2

私のプロジェクトでは、次の 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 構成で独自の日付形式を設定することは不可能だと思います。

唯一の解決策は、JodaModule を取り除き、日付形式をサポートするカスタム シリアライザー/デシリアライザーを作成することでしょうか?

ご意見をお待ちしております。ありがとうございました。

4

0 に答える 0