エキサイトのエンジニア藤沼です。 JavaのSpringBootにて、Getパラメーターで日付をLocalDateTimeで受け取る方法の覚書です。
やりたい事
下記のようなAPIにて、日付パラメータをLocalDateTimeで受け取りたい
/api/sample/?start_date_to=20201010000000
何故か取れない
@GetMapping("sample") public Mono<LocalDateTime> sample( @ModelAttribute @Validated SampleForm sampleForm, BindingResult bindingResult ) { return Mono.defer( () -> { return Mono.just(sampleForm.getStartDateTo()); } ).subscribeOn(Schedulers.boundedElastic()); }
@Data public class SampleForm { /** * 開始日時to */ private LocalDateTime startDateTo; @ConstructorProperties({ "start_date_to" }) public SampleForm( LocalDateTime startDateTo ) { this.startDateTo = startDateTo; } }
実行しても何故か日付はnullになる
/api/sample/?start_date_to=20201010000000
※捕捉 ConstructorPropertiesは、 getメソッドでパラメーターをどう受け取るかを指定できます。
LocalDateTimeで受け取るには@DateTimeFormatが必要だった
@GetMapping("sample") public Mono<SampleListResponseModel> sample( @ModelAttribute @Validated SampleListForm sampleListForm ) {
@Data public class SampleListForm { /** * 開始日時to */ private LocalDateTime startDateTo; @ConstructorProperties({ "start_date_to" }) public SeriesListForm( //↓このアノテーションをつける @DateTimeFormat(pattern = "yyyyMMddHHmmss") LocalDateTime startDateTo ) { this.startDateTo = startDateTo; } }
日付が受け取れるようになった
/api/sample/?start_date_to=20201010000000
捕捉:一つずつパラメーターを受け取る場合
@GetMapping("sample") public Mono<SeriesListResponseModel> sample( @RequestParam("start_date") @DateTimeFormat(pattern = "yyyyMMddHHmmss") LocalDateTime startDate ) {