2017-08-01 7 views
5

イム私の春のブートアプリケーション、私は、クエリパラメータとして日付を受け入れる一部のコントローラを持っている:Spring Bootで `@ DateTimeFormat`パターンをグローバルに設定する方法は?

@RestController 
public class MyController { 

    @GetMapping 
    public ResponseEntity<?> getDataByDate(
     @RequestParam(value = "date") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) 
     final LocalDate date) { 
    return ResponseEntity.ok(); 
    } 
} 

これがうまく機能し、私も@RequestParam(value = "date", required = false)を使用してパラメータをオプションとしてマークし、その後、Optional<LocalDate>を使用することができます。 Springはこれをすべて処理し、パラメータがないときは空のOptionalを渡します。

私はいくつかのコントローラに日付をクエリパラメータとして使用しているので、すべてのLocalDateクエリパラメータに対してこの動作を構成します。私はspring.mvc.date-patternプロパティを試しましたが、それはjava.util.Dateのためだけに働くようです。

ウェブを検索した後、私が思いついたのはControllerAdviceです。これはanswerから採用しました。この解決策の問題は、つまりOptional<LocalDate>をもう処理できないことです。これは、Spring Bootで動作を設定する方法が間違っているように感じます。

私の質問は次のとおりです。LocalDateのパターンを、Springブートで慣用的な方法でクエリパラメータとして使用するにはどのようにグローバルに設定するのですか?

+0

これは、ControllerAdviceを使用してグローバルに行う方法と似ています。 https://stackoverflow.com/questions/40644368/setting-default-datetimeformat-annotation-in-springも参照してください。 – selvinsource

+0

私が言ったように、この解決策は 'Optional 'を扱っておらず、それは私には慣用的ではありません。これを簡単に設定するための設定プロパティがいくつかあります。 – britter

+0

これは簡単にはできないようです。 https://github.com/spring-projects/spring-boot/issues/5523 – britter

答えて

1

これは現時点では簡単ではありません(単純な設定プロパティを設定するなど)。#5523を参照してください。これまでに私が見つけた最良の解決策は、Formatter<LocalDate>を登録することです。また、これはOptional<LocalDate>としてモデル化し、オプションのパラメータで動作します:

@Bean 
    public Formatter<LocalDate> localDateFormatter() { 
    return new Formatter<LocalDate>() { 
     @Override 
     public LocalDate parse(String text, Locale locale) throws ParseException { 
     return LocalDate.parse(text, DateTimeFormatter.ISO_DATE); 
     } 

     @Override 
     public String print(LocalDate object, Locale locale) { 
     return DateTimeFormatter.ISO_DATE.format(object); 
     } 
    }; 
    } 

それは#9930の私の提案がマージされたときは、この構成プロパティを使用して設定することが可能となります。

+0

私はブログを書いていますこれについての投稿:https://blog.codecentric.de/en/2017/08/parsing-of-localdate-query-parameters-in-spring-boot/ – britter

関連する問題