RestfulAPIにおけるBindingException生成までの流れ(Spring)
※あくまで処理フローの全体像をイメージするためのもの
基本の流れ
(クライアント)HttpRequest->(サーバー)SpringBoot->Controller
Formを経由する流れ
(クライアント)HttpRequest->(サーバー)SpringBoot->Form->Controller
Formを経由し、バリデーションが行われる場合(バリデーションエラーなし)
(クライアント)HttpRequest->(サーバー)SpringBoot->Form->(Validate処理)->Controller
Formを経由し、バリデーションが行われる場合(バリデーションエラーあり)
(クライアント)HttpRequest->(サーバー)SpringBoot->Form->(Validate処理)->Controller->BindingException例外
※バリデーションエラー発生時は、BindingException例外(BindingException または MethodArgumentNotValidException)が投げられる。
Formを経由し、バリデーションが行われ、ControllerAdviceがある場合(バリデーションエラーあり)
(クライアント)HttpRequest->(サーバー)SpringBoot->Form->(Validate処理)->Controller->BindingException例外->ControllerAdvice
※ControllerAdviceがある場合は、そこで補足することが可能。
Formを経由し、バリデーションが行われ、引数にBindingResultを設定している場合
(クライアント)HttpRequest->(サーバー)SpringBoot->Form->(Validate処理)->(BindingResult生成)->Controller
※バリデーションエラー発生時も例外は発生せず、結果がBindingResultへと格納される
なお、バリデーションにより発生しうる例外であるBindExceptionとMethodArgumentNotValidExceptionでは、BindExceptionの方が上位。
なので、ControllerAdviceで補足を確認するときは、MethodArgumentNotValidExceptionから試した方が良さげ
BindException:基底クラス(親)
MethodArgumentNotValidException:派生クラス(子)