* 備忘録 [#oa4a49d9] ** spring bootでバリデーションチェックのレスポンスをカスタマイズ [#q3a31302] バリデーションチェックで弾く場合、コントローラ層まで処理が進まないため、いくつかやることがあります。 *** 事前にリクエストされたパラメータを保持しておきたい。 [#v8558a58] スレッドローカルに保存するのが良いです スレッドローカルを操作するライブラリに、org.slf4j.MDCがあります。 **** バリデーション前に処理を行う [#sb84dd43] @Aspect を指定したクラスを用意します。 メソッドには、 @Before("within(org.springframework.stereotype.コントローラ)") とかいれます。 ここでスレッドローカルに値をいれておくわけです。 Httpのリクエストは、RequestContextHolderのrequestAttributes.requestにあります。 スレッドで値を共有したくはないので、後始末として @AfterReturning("org.springframework.stereotype.コントローラ") または @After("org.springframework.stereotype.コントローラ") とかいれます。 ** バリデーションエラー後 [#s5704ad2] @ControllerAdviceで指定したクラスで、@ExceptionHandlerで指定したメソッドで受けます。注意点としては、戻り値は、ResponseEntity<Object>とObject型にするのがコツです。