所谓全局异常处理器就是使用@ControllerAdvice注解。示例如下:

    1、统一返回实体定义

    1. package com.ruoyi.common.exception;
    2. /**
    3. * 登录异常
    4. *
    5. * @author ruoyi
    6. */
    7. public class LoginException extends RuntimeException
    8. {
    9. private static final long serialVersionUID = 1L;
    10. protected final String message;
    11. public LoginException(String message)
    12. {
    13. this.message = message;
    14. }
    15. @Override
    16. return message;
    17. }
    18. }

    3、基于@ControllerAdvice注解的Controller层的全局异常统一处理

    4、测试访问请求

    1. @Controller
    2. public class SysIndexController
    3. {
    4. /**
    5. * 首页方法
    6. */
    7. @GetMapping("/index")
    8. public String index(ModelMap mmap)
    9. {
    10. /**
    11. * 模拟用户未登录,抛出业务逻辑异常
    12. */
    13. SysUser user = ShiroUtils.getSysUser();
    14. if (StringUtils.isNull(user))
    15. {
    16. }
    17. mmap.put("user", user);
    18. }
    19. }

    对于一些特殊情况,如接口需要返回json,页面请求返回html可以使用如下方法

    1. @ExceptionHandler(LoginException.class)
    2. public Object loginException(HttpServletRequest request, LoginException e)
    3. {
    4. log.error(e.getMessage(), e);
    5. if (ServletUtils.isAjaxRequest(request))
    6. {
    7. return AjaxResult.error(e.getMessage());
    8. }
    9. else
    10. {
    11. return new ModelAndView("/error/500");
    12. }
    13. }

    若依系统的全局异常处理器GlobalExceptionHandler注意:如果全部异常处理返回json,那么可以使用@RestControllerAdvice代替@ControllerAdvice,这样在方法上就可以不需要添加。