如果项目中有多个controller文件,通常可以在baseController中实现ExceptionHandler的异常处理,而各个contoller继承basecontroller从而达到统一异常处理的目的
- @ExceptionHandler({Exception.class}) //申明捕获那个异常类
- public String ExceptionDemo(Exception e) {
- //写捕获到异常后要做什么
- logger.error(e.getMessage(), e);
- return "自定义异常返回";
- }
优点:ExceptionHandler简单易懂,并且对于异常处理没有限定方法格式;
缺点:由于ExceptionHandler仅作用于方法,对于多个controller的情况,仅为了一个方法(指的是ExceptionDemo),所有需要异常处理的controller都继承这个类,明明不相关的东西,强行给他们继承父类,不太好
单独使用@ExceptionHandler时,其必须在一个Controller中,然而当其与ControllerAdvice组合使用时就完全没有了这个限制。换句话说,二者的组合达到的全局的异常捕获处理。
- @ControllerAdvice
- @ResponseBody
- public class ExceptionAdvice {
- @ExceptionHandler(Exception.class)
- public Object exceptionAdvice(Exception e) {
- HashMap
result = new HashMap<>(); - result.put("success", -1);
- result.put("message", "总的异常信息:" + e.getMessage());
- result.put("data", null);
- return result;
- }
- @ExceptionHandler(NullPointerException.class)
- public Object nullPointerexceptionAdvice(NullPointerException e) {
- //操作
- }
- }
HandlerExceptionResolver本身SpringMVC内部的接口,其内部只有resolveException一个方法,通过实现该接口我们可以达到全局异常处理的目的。
- public class myHandlerExceptionResolver implements HandlerExceptionResolver {
- @Override
- public ModelAndView resolveException(HttpServletRequest request,
- HttpServletResponse response,
- Object handler, Exception ex) {
- //捕获到异常的操作
- return null;
- }
- }