1

我正在学习 Spring Boot 中的全局异常处理。我设计了一个用 @RestController 注释的控制器,它有一个抛出异常的控制器方法。我设计了另一个用@RestControllerAdvice/@ControllerAdvice 注释的名为GlobalExceptionHandling 的类。当使用@RestControllerAdvice 注释时,它可以正常工作并处理异常,但在使用@ControllerAdvice 注释时不能按预期工作。我正在分享我的代码和我在邮递员上得到的回复。

演示控制器:

@RestController
public class DemoController {

    @RequestMapping("exception/arithmetic")
    public String controllerForArithmeticException()
    {
        throw new ArithmeticException("Divide by zero error");
    }

    @RequestMapping("exception")
    public String controllerForException() throws Exception
    {
        throw new Exception("An exception occurred");
    }

}

GlobalExceptionHandler:(使用@RestControllerAdvice)

@RestControllerAdvice
public class GlobalExceptionHandler{


    @ExceptionHandler(value = Exception.class)
    public String handleException(Exception e)
    {
        return "Exception: " + e.getMessage();
    }


    @ExceptionHandler(value = ArithmeticException.class)
    @ResponseStatus(value = HttpStatus.BAD_REQUEST)
    public String handleArithmeticException(ArithmeticException e)
    {
        return "ArithmeticException: " + e.getMessage();
    }

}

对邮递员的响应:
状态: 404 错误请求
响应正文: ArithmeticException:除以零错误
控制台:控制台上没有打印任何内容。

GlobalExceptionHandler:(使用@ControllerAdvice)

@ControllerAdvice
public class GlobalExceptionHandler{


    @ExceptionHandler(value = Exception.class)
    public String handleException(Exception e)
    {
        return "Exception: " + e.getMessage();
    }


    @ExceptionHandler(value = ArithmeticException.class)
    @ResponseStatus(value = HttpStatus.BAD_REQUEST)
    public String handleArithmeticException(ArithmeticException e)
    {
        return "ArithmeticException: " + e.getMessage();
    }

}

对邮递员的响应:
状态: 404 错误请求
响应正文: {“时间戳”:“2020-02-15T12:41:40.988+0000”,“状态”:404,“错误”:“未找到”,“消息”: “除以零错误”,“路径”:“/exception/arithmetic”}
控制台:控制台上没有打印任何内容。

你能解释一下@ResponseBody 到底是做什么的吗?

4

0 回答 0