@RestControllerAdvice vs @ControllerAdvice

时间:2017-03-30 17:16:21

标签: spring

  • @RestControllerAdvice和@ControllerAdvice之间的主要区别是什么?
  • 是否应该始终将@RestControllerAdvice用于休息服务和@ControllerAdvice MVC?

3 个答案:

答案 0 :(得分:12)

@RestControllerAdvice只是@ControllerAdvice + @ResponseBody的语法糖,您可以查看here

  

我们是否应该始终使用@RestControllerAdvice来进行休息服务   @ControllerAdvice MVC?

同样,如上所述,@ControllerAdvice也可用于REST Web服务,但您还需要使用@ResponseBody

答案 1 :(得分:1)

此外,我们可以将其理解为:

@RestControler = @Controller + @ResponseBody

@RestControllerAdvice = @ControllerAdvice + @ResponseBody

请记住,@ControllerAdvice是使用RestfulApi处理Exception时更方便的注释。

操作系统用法示例:

@RestControllerAdvice
public class WebRestControllerAdvice {

  @ExceptionHandler(CustomNotFoundException.class)
  public ResponseMsg handleNotFoundException(CustomNotFoundException ex) {
    ResponseMsg responseMsg = new ResponseMsg(ex.getMessage());
    return responseMsg;
  }
}

在这种情况下,任何CustomInFoundFoundException异常都将抛出到响应正文中。

示例摘录于此: https://grokonez.com/spring-framework/spring-mvc/use-restcontrolleradvice-new-features-spring-framework-4-3

答案 2 :(得分:1)

异常:好的REST API应该正确处理异常并将正确的响应发送给用户。不应为用户呈现任何未处理的异常。 REST API开发人员将有两个与错误处理有关的要求。

  1. 错误处理的常见地方
  2. 类似的错误响应正文,并且在API之间具有正确的HTTP状态代码

@RestControllerAdvice是@ControllerAdvice和@ResponseBody的组合

@ControllerAdvice注释是在Spring 3.2中首次引入的。

我们可以使用 @ControllerAdvice批注在RESTful服务中处理异常,但是我们需要单独添加@ResponseBody

注意:
GlobalExceptionHandler带有@ControllerAdvice批注,因此它将拦截整个应用程序中控制器的异常。