Spring BootでREST APIを0から学ぼう!(バリデーションを実装する)

spring restful
Spring restful サービスを、実際にプロジェクトを作成するところから記録していきます。 細かく記録してますので、新たにspring restfulを学ぼうとしている方には、きっと参考になると思います。 ところどころでエラーがでた場合も、それも含めて記録してあります。 新たにspring restfulを学ぼうとしている方の役に立てられたら幸いです。

今回は、前回までのコードにバリデーションの機能を追加していきますね

バリデーションでの検証は大切ですよね

できたらカスタマイズの方法も知りたいわ

応用できると良いですもんね

カスタマイズの方法も踏まえて、順番に解説していきます

開発環境は以下のようになっています。
OS: Mac
IDE: STS→ダウンロード先はこちら
Java: java8
spring boot: 2.1.3.RELEASE

バリデーションを実装する前の準備を行う

バリデーションを実装する前にpom.xmlに下記を追加します。

ちゃんとファイルを保存しておいてくださいね

そうしないと上記の変更が反映されません。

上記の追加したものが反映されないと、これから行っていく内容で、うまくいかないケースが発生します。

 

その際は、下記の画像のように

プロジェクトを右クリック>Maven>プロジェクトの更新

を行ってみてください。

では準備は整ったので次にコードを修正していきますね。

 

バリデーションのコードを修正する

「User」クラスを修正します。

修正する箇所は下記の部分になります。

name の部分には@Size(min=2)のアノテーションを追加しています。

バリデーション内容はなんとなくわかると思いますが、名前の文字数が2文字以上であること

次にbirthDateの部分には@Pastになっていますが、バリデーションの内容は、過去の日付であることを検証しています。

 

さらに、データをPostする際に検証するので「UserResource」クラス内に@Validを追加します。

これでuserを登録しようとする際に、

  • 名前の文字数が2文字以上であること
  • 過去の日付であること

が検証されます。

 

では実際にやってみましょう。

下記のケースでは名前には8文字で日付は過去の日付を設定しているため

ステータスは、201 Createdになっているのがわかると思います。

では次に検証エラーになるデータを登録してみましょう

ちゃんとエラーが返ってきていますね

 

 

しかし、何がエラーになっているのかこれだけでは分かりづらいです

 

もうすこし使いやすいようにカスタマイズしていきましょう。

バリデーションの検証をカスタマイズ

以前学んだ例外処理の部分にコードを追加していきます。

復習も含めて例外処理の記事を確認しておくと良いですよ

ではバリデーションのカスタマイズを実装していきます。

CustomizedResponseeintityExceptionHandlerクラスに下記のコードを追加します。

 

CustomizedResponseeintityExceptionHandlerクラスすべてのコードも載せておきますね

 

CustomizedResponseeintityExceptionHandlerクラスは、ResponseEntityExceptionHandlerクラスを継承しています。

ResponseEntityExceptionHandlerクラス内には、handleHttpMessageNotWritableメソッドがあり、これをオーバライドして使用しています。

メソッド内で使われていMethodArgumentNotValidExceptionは、HTTPリクエスされる際のリクエストボディに設定されている登録データを検証し、エラーがある際に発生する例外です。

ちなみに、getBindingResult() にて 検証エラーの結果を返しています。

ではサーバーを再起動して実際に行ってみます。

検証エラーになるデータを登録してみます。

はい しっかりとエラーが返ってきていますね

更にエラー内容がわかりやすくしてみますね

Userクラスを少し修正します。

messageの部分が追加されています。

  • message = “名前な二文字以上”
  • message = “バースデーは過去の日付”

 

では実際に動かしてみましょう

エラーの内容を見てみると上記で追加したメッセージが表示されているのがわかると思います。

今回はバリデーションに関して学んできました。

これから先、さらに実践的な内容になっていきますので

一緒に学んでいきましょう!

次回はHateoasに関して解説していきますね

コメント

タイトルとURLをコピーしました