Spring boot 在RESTServices的情况下,为什么要将@ResponseBody与@ControllerAdvice一起使用

Spring boot 在RESTServices的情况下,为什么要将@ResponseBody与@ControllerAdvice一起使用,spring-boot,exceptionhandler,controller-advice,Spring Boot,Exceptionhandler,Controller Advice,我正在学习SpringBoot中的全局异常处理。我设计了一个带有@RestController注释的控制器,它有一个抛出异常的控制器方法。我设计了另一个名为GlobalExceptionHandling的类,用@RestControllerAdvice/@ControllerAdvice注释。当使用@RestControllerAdvice进行注释时,它可以很好地工作并处理异常,但当使用@ControllerAdvice进行注释时,它不能像预期的那样工作。我正在分享我的代码和我在《邮递员》上得到

我正在学习SpringBoot中的全局异常处理。我设计了一个带有@RestController注释的控制器,它有一个抛出异常的控制器方法。我设计了另一个名为GlobalExceptionHandling的类,用@RestControllerAdvice/@ControllerAdvice注释。当使用@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一起)

对邮差的回应:
状态:404错误请求
响应主体:算术异常:除以零错误
控制台:控制台上不会打印任何内容

GlobalExceptionHandler:(与@ControllerAdvice一起)

对邮差的回应:
状态:404错误请求
答复机构:{ “时间戳”:“2020-02-15T12:41:40.988+0000”, “状态”:404, “错误”:“未找到”, “消息”:“被零除错误”, “路径”:“/异常/算术” }
控制台:控制台上不会打印任何内容


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

当你在
handleArithmeticException(算术异常e)
方法中打印一些东西到控制台时,你在哪里看到了
@RequestBody
注释的用法。它有效吗?我问了几乎相同的问题:。我自己找到了一个答案,这可能会对您有所帮助。您在哪里看到了
@RequestBody
注释的使用?当您在
handleArithmeticException(算术异常e)
方法中打印要控制台的内容时。它有效吗?我问了几乎相同的问题:。我自己找到了一个答案,也许可以帮助你。
@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();
    }

}
@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();
    }

}