2017-08-27 4 views
0

QueryDSL残りのエンドポイントに渡されたときのSpringのLocalDateTime(jsr310)のデフォルトフォーマットを設定します

と組み合わせて使用​​すると、ユーザーがURLの日付をリクエストパラメータとして渡すときにデフォルトの java.time.LocalDateTimeフォーマットを調べようとしています

私はQuerydslPredicateArgumentResolverを見て、そしてDateTimeFormatterRegistrarで終わると、デフォルトから読むことを発見した:だから

private DateTimeFormatter getFormatter(Type type) { 
    DateTimeFormatter formatter = this.formatters.get(type); 
    if (formatter != null) { 
     return formatter; 
    } 
    DateTimeFormatter fallbackFormatter = getFallbackFormatter(type); 
    return this.factories.get(type).createDateTimeFormatter(fallbackFormatter); 
} 

private DateTimeFormatter getFallbackFormatter(Type type) { 
    switch (type) { 
     case DATE: return DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT); 
     case TIME: return DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT); 
     default: return DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT); 
    } 
} 

、デフォルト値は短くする必要があります、しかし、それは期待通りに動作していないようです。

また、フォーマットをオーバーライドする方法をアプリケーション全体(フィールド固有の@DateTimeFormatのアノテーションを使用していない)

答えて

0

だけではなく、QueryDSLで使用されている日付パラメータのためのこのソリューションが、春に渡される任意の日付のパラメータについて

// This example uses ISO format for both java.util.Date classes and jsr310 classes, you can change the format to whatever suitable for your case 
@Configuration 
public static class WebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addFormatters(FormatterRegistry registry) { 
     super.addFormatters(registry); 

     DateFormatter javaUtilDateFormatter = new DateFormatter(); 
     javaUtilDateFormatter.setIso(ISO.DATE_TIME); 

     DateTimeFormatter jsr310Formatter = DateTimeFormatter.ISO_DATE_TIME; 

     DateFormatterRegistrar javaUtilDate = new DateFormatterRegistrar(); 
     javaUtilDate.setFormatter(javaUtilDateFormatter); 
     javaUtilDate.registerFormatters(registry); 

     DateTimeFormatterRegistrar jsr310 = new DateTimeFormatterRegistrar(); 
     jsr310.setDateTimeFormatter(jsr310Formatter); 
     jsr310.setDateFormatter(jsr310Formatter); 
     jsr310.setTimeFormatter(jsr310Formatter); 
     jsr310.registerFormatters(registry); 

    } 
} 

両方java.util.dateするレジスタフォーマッタ上記のクラスは、およびjsr310 LOCALDATE /にLocalTime/LocalDateTimeを、また、Jodaの日時のためにフォーマッタを登録するために使用することができる(また、任意の他のフォーマッタを登録して使用することができます) 。

完全なコード例:https://github.com/project-seeds/spring-argument-resolver-parser