@RestControllerAdvice vs @ControllerAdvice

后端 未结 3 1842
孤独总比滥情好
孤独总比滥情好 2020-12-14 07:03
  • What are the major difference between @RestControllerAdvice and @ControllerAdvice ??
  • Is it we should always use @RestControllerAdvice for rest services and @C
相关标签:
3条回答
  • 2020-12-14 07:37

    Exception: A good REST API should handle the exception properly and send the proper response to the user. The user should not be rendered with any unhandled exception. A REST API developer will have two requirements related to error handling.

    1. Common place for Error handling
    2. Similar Error Response body with a proper HTTP status code across APIs

    @RestControllerAdvice is the combination of both @ControllerAdvice and @ResponseBody

    The @ControllerAdvice annotation was first introduced in Spring 3.2.

    We can use the @ControllerAdvice annotation for handling exceptions in the RESTful Services but we need to add @ResponseBody separately.

    Note:
    GlobalExceptionHandler was annotated with @ControllerAdvice, thus it is going to intercept exceptions from controllers accross the application.

    0 讨论(0)
  • 2020-12-14 07:42

    In addition, we can just understand it as:

    @RestControler = @Controller + @ResponseBody

    @RestControllerAdvice = @ControllerAdvice + @ResponseBody.

    Keeping in mind that @ControllerAdvice is more convenient annotation for handling Exception with RestfulApi.

    Example os usage:

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

    In that case any exception instanceOf CustomNotFoundException will be thrown in body of response.

    Example extracted here: https://grokonez.com/spring-framework/spring-mvc/use-restcontrolleradvice-new-features-spring-framework-4-3

    0 讨论(0)
  • 2020-12-14 07:48

    @RestControllerAdvice is just a syntactic sugar for @ControllerAdvice + @ResponseBody, you can look here.

    Is it we should always use @RestControllerAdvice for rest services and @ControllerAdvice MVC?

    Again, as mentioned above, @ControllerAdvice can be used even for REST web services as well, but you need to additionally use @ResponseBody.

    0 讨论(0)
提交回复
热议问题