我正在学习 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 到底是做什么的吗?