javaのSpringBootでパラメーターの日付をLocalDateTimeで受け取る方法

エキサイトのエンジニア藤沼です。 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

f:id:aya_excite:20210804155117p:plain

※捕捉 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

f:id:aya_excite:20210804155755p:plain

捕捉:一つずつパラメーターを受け取る場合
@GetMapping("sample")
public Mono<SeriesListResponseModel> sample(
    @RequestParam("start_date")
    @DateTimeFormat(pattern = "yyyyMMddHHmmss")
    LocalDateTime startDate
) {