http://wiki.fasterxml.com/JacksonFAQDateHandlingによると、「DateTime は、 java.util.Date の処理方法と同様に、自動的にシリアライズ/デシリアライズできます。」ただし、この自動機能を実行できません。このトピックに関連する StackOverflow の議論がありますが、そのほとんどはコードベースのソリューションに関係していますが、上記の引用に基づいて、単純な構成でこれを達成できるはずです。
http://wiki.fasterxml.com/JacksonFAQDateHandlingごとに、日付をタイムスタンプとして書き込むことが false になるように構成を設定しています。その結果、java.util.Date 型は ISO 8601 形式にシリアライズされますが、org.joda.time.DateTime 型は長いオブジェクト表現にシリアライズされます。
私の環境はこれです:
Jackson 2.1
Joda time 2.1
Spring 3.2
Java 1.6
jsonMapper Bean の私の Spring 構成は
@Bean
public ObjectMapper jsonMapper() {
ObjectMapper objectMapper = new ObjectMapper();
//Fully qualified path shows I am using latest enum
ObjectMapper.configure(com.fasterxml.jackson.databind.SerializationFeature.
WRITE_DATES_AS_TIMESTAMPS , false);
return objectMapper;
}
私のテストコードスニペットはこれです
Date d = new Date();
DateTime dt = new DateTime(d); //Joda time
Map<String, Object> link = new LinkedHashMap<String, Object>();
link.put("date", d);
link.put("createdDateTime", dt);
結果の JSON 出力のスニペットは次のとおりです。
{"date":"2012-12-24T21:20:47.668+0000"}
{"createdDateTime": {"year":2012,"dayOfMonth":24,"dayOfWeek":1,"era":1,"dayOfYear":359,"centuryOfEra":20,"yearOfEra":2012,"yearOfCentury":12,"weekyear":2012,"monthOfYear":12 *... remainder snipped for brevity*}}
私の予想では、DateTime オブジェクトは、構成に基づいて Date オブジェクトのオブジェクトと一致する必要があります。私は何を間違っていますか、または何を誤解していますか? Jackson のドキュメントから自動的に単語を読みすぎているのでしょうか。ISO 8601 ではありませんが、文字列表現が生成されたという事実は、宣伝されている自動機能を生成しているのでしょうか?