バリデーションチェックで弾く場合、コントローラ層まで処理が進まないため、いくつかやることがあります。
スレッドローカルに保存するのが良いです
スレッドローカルを操作するライブラリに、org.slf4j.MDCがあります。
@Aspect
を指定したクラスを用意します。
メソッドには、
@Before("within(org.springframework.stereotype.コントローラ)")
とかいれます。
ここでスレッドローカルに値をいれておくわけです。
Httpのリクエストは、RequestContextHolder?のrequestAttributes.requestにあります。
スレッドで値を共有したくはないので、後始末として
@AfterReturning("org.springframework.stereotype.コントローラ")
または
@After("org.springframework.stereotype.コントローラ")
とかいれます。
@ControllerAdvice?で指定したクラスで、@ExceptionHandler?で指定したメソッドで受けます。注意点としては、戻り値は、ResponseEntity?<Object>とObject型にするのがコツです。