私は、特定のタイムゾーンでCalendarオブジェクトを直列化および逆シリアル化する方法を理解しようとしています。ジャクソンが自分のタイムゾーンを尊重し、カレンダーのインスタンスを指定されたタイムゾーンに維持できるようにすることは合理的だと思っています。シリアライズしてもデシリアライズはしません。私は間違って何をしていますか?ジャクソンを使用して特定のタイムゾーンでカレンダーを取得する方法は?
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import java.io.ByteArrayOutputStream;
public class JacksonTimeZoneTest2 {
public Calendar time;
public static void main(String[] args) throws java.io.IOException {
JacksonTimeZoneTest2 test = new JacksonTimeZoneTest2();
test.time = new java.util.GregorianCalendar(2014, Calendar.SEPTEMBER, 1);
ObjectMapper mapper = new ObjectMapper();
SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone("CET"));
mapper.setDateFormat(sdf);
ByteArrayOutputStream serialized = new ByteArrayOutputStream();
mapper.writeValue(serialized, test);
String json = serialized.toString();
if (json.contains("CEST")) {
System.out.println("It serialized to CET timezone (CEST) [" + serialized.toString() + "]");
}
JacksonTimeZoneTest2 test2 = mapper.readValue(serialized.toString(), JacksonTimeZoneTest2.class);
if (! "CET".equals(test2.time.getTimeZone().getID())) {
System.out.println("Problem! It deserialized to [" + test2.time.getTimeZone().getID() + "] instead of CET");
}
}
}
私は次の出力を取得し、コードを実行すると:私はまた、タイムゾーンを指定JsonFormatアノテーションで試してみました
It serialized to CET timezone (CEST) [{"time":"Mon, 01 Sep 2014 08:00:00 CEST"}]
Problem! It deserialized to [UTC] instead of CET
を、と私は同じ結果を得ました。私はan issue against Jacksonと記録しました。
いつものように、まずはあなたがジャクソンの最新バージョンを使用していることを確認することです。現在、少なくとも2.7(0.7)、2.8でない場合(0.3)。 – StaxMan
申し訳ありませんが、2.8.3でテストしていることを忘れてしまいました –