* 備忘録 [#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型にするのがコツです。
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS