1

Spring コントローラーによって呼び出されたコードが Spring をスローしDataAccessException、コントローラーがそれをキャッチしないか、例外ハンドラーを持っていない場合、Spring は適切な HTTP 応答ステータスをクライアントに返しますか?

つまり、 にはDataAccessException適切な@ResponseStatus注釈がありますか? それとも、Spring MVC フレームワークはこれらの例外を明示的にキャッチして処理しますか? または、フレームワークはそれらに対して特別なことを何もせず、他のものと同じように扱いますRuntimeExceptionか?その結果、500 (Internal Server Error) の HTTP ステータスが発生すると思います。

4

1 に答える 1

1

DispatcherServlet.doServiceSpring に例外のハンドラーがない場合、(およびそれが委譲する後続のメソッドは) サーブレット コンテナーに例外を委譲するように見えます。デフォルトでは、Spring には@ExceptionHandler@ResponseStatusアノテーションを使用するハンドラーと、有望なDefaultHandlerExceptionResolver. しかし、後者はDataAccessExceptions に対して何もしません。したがって、Spring MVC は s に対して特別なことは何もしませんDataAccessException

DataAccessExceptions を特定の HTTP 応答ステータス コードにマップする場合は、メソッドを使用@ExceptionHandlerできます。

次のようになります。

@Controller
public class YourController {

  @RequestMapping(value = "foo")
  public void foo() throws DataAccessException {
    ...
  }

  @ExceptionHandler(DataAccessException.class)
  @ResponseStatus(value=HttpStatus.INTERNAL_SERVER_ERROR)
  @ResponseBody
  public String handleException(DataAccessException ex) {
    return "error message";
  }
}
于 2013-06-29T16:06:52.777 に答える