The differences between @RestControllerAdvice and @ControllerAdvice is : @RestControllerAdvice = @ControllerAdvice + @ResponseBody . - we can use in REST web services. @ControllerAdvice - We can use in both MVC and Rest web services, need to provide the ResponseBody if we use this in Rest web services.
@ControllerAdvice is a specialization of the @Component annotation which allows to handle exceptions across the whole application in one global handling component. It can be viewed as an interceptor of exceptions thrown by methods annotated with @RequestMapping and similar.
The @RestControllerAdvice annotation is specialization of @Component annotation so that it is auto-detected via classpath scanning. It is a kind of interceptor that surrounds the logic in our Controllers and allows us to apply some common logic to them.
@Controller is used to mark classes as Spring MVC Controller. @RestController annotation is a special controller used in RESTful Web services, and it's the combination of @Controller and @ResponseBody annotation. It is a specialized version of @Component annotation.
@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
.
In addition, we can just understand it as:
@RestControler
= @Controller
+ @ResponseBody
@RestControllerAdvice
= @ControllerAdvice
+ @ResponseBody
.
Keeping in mind that @RestControllerAdvice
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With