2017-07-03 5 views
1

私は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に設定するとうまくいく方法がありますか?

答えて

1

私はフォーマッタのタイムゾーンを設定する必要があると思います。

https://github.com/jhipster/generator-jhipster/blob/09f0957b3ac9711fb9dd86f77ad69c549401074f/generators/server/templates/src/main/java/package/config/_JacksonConfiguration.java

@Configuration 
public class JacksonConfiguration { 

    public static final DateTimeFormatter ISO_FIXED_FORMAT = 
     DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").withZone(ZoneId.of("Z")); 

    @Bean 
    public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() { 
     return new Jackson2ObjectMapperBuilderCustomizer() { 
      @Override 
      public void customize(Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder) { 
       jackson2ObjectMapperBuilder.serializers(new ZonedDateTimeSerializer(ISO_FIXED_FORMAT)); 
      } 
     }; 
    } 
} 
+0

感謝を参照してください、それが正常に動作します...しかし、フィールドはZonedDateTimeである場合にのみ。 LocalDateTimeでも動作するようにしたいのですが?現在、LocalDateTimeのフィールドはローカルタイムゾーン( "createdDate": "2017-07-04T08:58:04")で返され、ZonedTimeZoneは正しく返されます( "lastModifiedDate": "2017-07-04T06:58:04.000Z ") – drenda

+0

私はLocalDateTimeがタイムゾーンの概念を持っているとは思わない。フォーマッタでwithZone()を使用してZonedDateTimeと同じ種類のシリアライザを追加しようとしましたか? –

+0

私は試しましたが、時間はUTCではなく、私のタイムゾーンに残ります。 LocalDateTimeにはタイムゾーンの概念がありませんが、時刻はUTCで返されます。それを行う機会はいくつかありますか? – drenda

関連する問題