私はJackson 2.8を使用しており、ISO 8601タイムスタンプ内でミリ秒を許可しないAPIと通信する必要があります。Jackson、ISO 8601、ミリ秒無しでシリアライズ
期待形式はこれです:私はfalse
にWRITE_DATES_AS_TIMESTAMPS
セットでジャクソンのJavaTimeModuleを使用してい"2016-12-24T00:00:00Z"
。
しかし、これはミリ秒単位で表示されます。
だから私は何も変わっていないobjectMapper.setDateFormat
を使ってみました。私は作品Instant.class
のデフォルト・シリアライザをオーバーライドしてい
ObjectMapper om = new ObjectMapper();
DateTimeFormatter dtf = new DateTimeFormatterBuilder()
.appendInstant(0)
.toFormatter();
JavaTimeModule jtm = new JavaTimeModule();
jtm.addSerializer(Instant.class, new JsonSerializer<Instant>() {
@Override
public void serialize(Instant value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
gen.writeString(dtf.format(value));
}
});
om.registerModule(jtm);
:
私の現在の回避策はこれです。
これを解決するためにいくつかの設定パラメータを使用する良い方法はありますか?
フォーマットとして 'DateTimeFormatter.ISO_INSTANT'を試してみましたか? https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ISO_INSTANT – Gelunox
ターゲットAPIが制御できません。 –
はい、それを試みました。ミリ秒も印刷されます。おそらくミリ秒を「0」に設定して「インスタント」を明示的に作成すると機能します。しかし、それは私のユースケースには十分安全ではありません。 **常に**直列化のためにミリ秒を無視/捨てなければなりません。 '...編集:はい、APIはいくつかの外部の会社からです。コントロールなし。 –