2017-01-19 12 views
5

は、私は次のコードだ:JacksonとLocalDateTimeをシリアル化する方法は?

ObjectMapper mapper = new ObjectMapper(); 
    mapper.registerModule(new JavaTimeModule()); 
    mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); 
    String now = new ObjectMapper().writeValueAsString(new SomeClass(LocalDateTime.now())); 
    System.out.println(now); 

をそして、私はこれを取得:

{ "時間":{ "時間":20、 "分":49、 "第二": 42、 "ナノ":9900万、 "DAYOFYEAR":19、 "のdayOfWeek": "木曜日"、 "月": "1月"、 "DAYOFMONTH":19、 "年":2017、 "monthValue":1、 "年表":{" ID ":" ISO」、 "calendarType": "ISO8601"}}}

私は何を達成したいことはISO8601

内の文字列であります

2017-01-19T18:36:51Z

+0

この作業のようなものがありますか?DateFormat df = new SimpleDateFormat( "MM/dd/yy hh:mm a");次に: mapper.setDateFormat(df); – dave823

答えて

7

これはおそらく、あなたのコードに誤りが原因です。あなたはここでは、マッパーの新しい未設定のインスタンスを使用していた修正です。

ObjectMapper mapper = new ObjectMapper(); 
mapper.registerModule(new JavaTimeModule()); 
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); 
String now = mapper.writeValueAsString(new SomeClass(LocalDateTime.now())); 
System.out.println(now); 
+0

OMG、私はどんな盲目的なバカなの? ''新しいObjectMapper() ''私には恥ずかしい。 – user1745356

2

これは、あなたがOffsetDateTimeのために何ができるかです:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "uuuu-MM-dd'T'HH:mm:ss.SSSXXXX") 
private OffsetDateTime timeOfBirth; 

のLocalDateTimeのために存在しているので、あなたがXXXX(ゾーンオフセット)を使用することはできませんオフセット情報はありません。だからあなたはそれを落とすことができます。しかしISO8601 discourages using Local Timeは、それが曖昧だとして:なしUTC関係情報は、時間の表現で指定されていない場合

、 時刻は現地時間であると仮定されます。 は、同じ時間帯に通信するローカル時間を仮定することが安全であってもよいが、異なるタイムゾーン間の通信に使用される場合、それは 曖昧です。単一の地理的タイムゾーン内の でも、地域が夏時間を観測する場合、一部の現地時間は になります。これは 標準の表記法を使用して、タイムゾーン(ゾーン指定子)を示すために通常 好ましいです。

関連する問題