私はSpringブート1.5.3、Spring Data REST、HATEOASを使用してRESTサービスを作成しています。 私はアプリケーションでjava.time.*
日時を使用していますが、これをデータベースのUTC形式で保存しています。 ベストプラクティスに従い、私のRESTエンドポイントでUTCの日付を返したいと思います。私はそれを達成することができるよ@JsonFormat使用Springブート、Jsonとjava.time。*のグローバルタイムゾーンを定義する
:
@JsonFormat(timezone = "UTC", pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
@LastModifiedDate
private LocalDateTime lastModifiedDate;
を、私はそれにすべての私の豆に注釈を付けることを回避したい、と私は、グローバルコンフィギュレーションを持っていることを好むだろう。 はthis enhancemente requestによると、私はこの構成では私の問題の50%を解決することができた:
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return new Jackson2ObjectMapperBuilderCustomizer() {
@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
jacksonObjectMapperBuilder.serializers(
new LocalDateTimeSerializer(new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd'T'HH:mm:ss").toFormatter()));
jacksonObjectMapperBuilder.serializers(new ZonedDateTimeSerializer(
new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ").toFormatter()));
}
};
}
このパターンの問題ではなく、タイムゾーンの問題を修正します。私のタイムゾーンは引き続きローカルのタイムゾーンにとどまります。 残念なことにjava.util.time
のためだけに機能するspring.jackson.time-zone=UTC
のように、JSONシリアライザのタイムゾーンをUTCに設定するとうまくいく方法がありますか?
感謝を参照してください、それが正常に動作します...しかし、フィールドはZonedDateTimeである場合にのみ。 LocalDateTimeでも動作するようにしたいのですが?現在、LocalDateTimeのフィールドはローカルタイムゾーン( "createdDate": "2017-07-04T08:58:04")で返され、ZonedTimeZoneは正しく返されます( "lastModifiedDate": "2017-07-04T06:58:04.000Z ") – drenda
私はLocalDateTimeがタイムゾーンの概念を持っているとは思わない。フォーマッタでwithZone()を使用してZonedDateTimeと同じ種類のシリアライザを追加しようとしましたか? –
私は試しましたが、時間はUTCではなく、私のタイムゾーンに残ります。 LocalDateTimeにはタイムゾーンの概念がありませんが、時刻はUTCで返されます。それを行う機会はいくつかありますか? – drenda