Spring MVC 中如何进行异常处理?

推荐答案

在Spring MVC中,可以通过以下几种方式进行异常处理:

  1. 使用@ExceptionHandler注解:在控制器中定义一个方法,并使用@ExceptionHandler注解来捕获特定类型的异常。该方法可以返回一个视图名称或一个ResponseEntity对象。

  2. 使用@ControllerAdvice注解:创建一个全局异常处理类,并使用@ControllerAdvice注解。在该类中定义多个@ExceptionHandler方法来处理不同控制器中抛出的异常。

  3. 实现HandlerExceptionResolver接口:自定义一个异常解析器,实现HandlerExceptionResolver接口,并在Spring配置中注册该解析器。

  4. 使用@ResponseStatus注解:在自定义异常类上使用@ResponseStatus注解,指定HTTP状态码和错误信息。

本题详细解读

1. 使用@ExceptionHandler注解

@ExceptionHandler注解允许你在控制器中定义一个方法来处理特定类型的异常。例如:

-- -------------------- ---- -------
-----------
------ ----- ------------ -

    ------------------------------------------
    ------ ---------------------- ----------------------------------------- --- -
        ------ --- ------------------------ - - ---------------- ------------------------
    -

    -----------------------
    ------ ------ --------- ------ ----------------- -
        ----- --- ---------------------------- ---- --------
    -
-

在这个例子中,handleMyCustomException方法会捕获MyCustomException异常,并返回一个包含错误信息的ResponseEntity

2. 使用@ControllerAdvice注解

@ControllerAdvice注解允许你定义一个全局异常处理类,处理多个控制器中抛出的异常。例如:

在这个例子中,GlobalExceptionHandler类会捕获所有控制器中抛出的MyCustomException异常,并返回一个全局错误响应。

3. 实现HandlerExceptionResolver接口

通过实现HandlerExceptionResolver接口,你可以自定义一个异常解析器来处理异常。例如:

-- -------------------- ---- -------
------ ----- ----------------------- ---------- ------------------------ -

    ---------
    ------ ------------ ----------------------------------- -------- ------------------- --------- ------ -------- --------- --- -
        ------------ ------------ - --- ---------------
        ----------------------------------
        -------------------------------------- -----------------
        ------ -------------
    -
-

然后,在Spring配置中注册该解析器:

4. 使用@ResponseStatus注解

@ResponseStatus注解可以用于自定义异常类,指定HTTP状态码和错误信息。例如:

当抛出ResourceNotFoundException时,Spring会自动返回HTTP 404状态码和指定的错误信息。

纠错
反馈