1

私はSpring 3.2.1を使用しておりPropertyEditorSupport、列挙型に自動変換したいパラメーターを大文字に強制する必要があるため、大文字と小文字の異なるパラメーターが変換されます。IllegalArgumentExceptionパラメータ String を列挙型に変換できない場合は、 がスローされる可能性があります。私の問題は、ステータス コードが 400 であるべきときに 500 として返されることです。ステータス コードをそこに設定するつもりで、 ResponseEntityExceptionHandlerannotated with@ControllerAdviceおよび with a method annotatedを作成しました@ExceptionHandler (IllegalArgumentException.class)が、例外がスローされたときにメソッドが呼び出されることはありません。なぜだめですか?MaxUploadSizeExceededException が Spring で例外処理メソッドを呼び出さない、ここで説明したのと同じ問題ですか? すなわち

「...リクエストがディスパッチャーサーブレットに到達する前に例外がスローされます。したがって、例外がスローされた時点でターゲットコントローラーがまだ決定されていないため、例外ハンドラーは呼び出されません。」

もしそうなら、どうすれば適切なステータスコードを返すことができますか?

4

1 に答える 1

0

短縮版:

アノテーション@ExceptionHandler(Exception)付きメソッドを@Controllerクラスに入れます。


より長いバージョン:

@ExceptionHandler(XxxException.class)クラスの注釈付きメソッドは、一致するメソッドに入った「後に」発生した@ControllerAdvice場合にのみ呼び出されることに気付きました。XxxException@RequestMapping

MaxUploadSizeExceededExceptionやのような条件でMethodArgumentNotValidExceptionは、SpringMVC が@RequestMappingメソッドに入らないため、アドバイスは適用されません。

私の解決策は、悲しいこと@ExceptionHandler(XxxException.class)に、注釈付きのメソッドを実際のコントローラー クラスに配置することでした。良くありませんが、機能します。

お役に立てれば。誰かがより良い解決策を知っている場合 (を使用している場合@ControllerAdvice)、共有してください。

于 2013-12-17T14:45:14.020 に答える