私のプロジェクトでは、次の 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 を取り除き、日付形式をサポートするカスタム シリアライザー/デシリアライザーを作成することでしょうか?
ご意見をお待ちしております。ありがとうございました。