Spring Boot | リクエストパラメータのyyyy-mm-dd形式の文字列をjava.util.Dateで受け取る方法




どうも高妻です。Twitterでプログラミングのことや暗号通貨のことをつぶやいているのでよかったらフォローしてください。  

Javaの日付データの扱いはややこしい

Java初心者には日付データを扱うのが非常にわかりにくいですよね。自分は今でもDateの扱いは調べないとできません。。。まあ覚えないといけないくらい複雑って時点で言語的にダメな気がしてるんですけど。

util.Date、sqlDate、Timestamp、Calender、LocalDate、ZoneDate、OffsetDateなどなどJava初心者には理解不能。。。

リクエストからこれらの値をどう受け取るかも最初は謎すぎた。

リクエストパラメータから文字列の日付情報を受け取る

yyyy-MM-ddとかyyyy-mm-dd hh:MMl:ssといったパターンの文字列をDate型に変換するのに@InitBinder@ControllerAdviseを使います。

まず文字列をDate型に変換する方法としてInitBinderというものを使用します。これはControllerに渡ってくるパラメータに対して事前に処理を加えることができます。

このInitBinderをどのタイミングで実行するか定義するのにControllerAdviseを使用します。これはControllerの処理の前後に任意の処理を仕込むことができるものでこの仕組みを使ってInitBinderの処理を割り込ませます。

実装はたったこれだけです。

クラスの先頭に@ControllerAdviceをつけると全コントローラーに対して処理を割り込ませることができます。DIしないといけないので@Componetもつけてください。

@InitBinderがリクエストパラメータから受け取ったデータに対して任意の処理を実行できるものです。

startDate,endDate,targetDatetimeという文字列はリクエストパラメータとして送られてくる変数名を設定しています。

文字列の日付データを数行で定義できて、全部のControllerに対して適用できるのでここら辺の仕組みは非常に簡単です。

設定も複数かけて2種類のフォーマットを定義しても問題ありません。

The following two tabs change content below.

高妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 現在はTwitterなどSNSのテキスト解析を行うソーシャルメディア分析のサーバーサイドを開発中。言語はNode.js、Kotlinを使用。






コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です