• SpringBoot 全局异常处理器


    package com.ruoyi.framework.web.exception;
    
    import javax.servlet.http.HttpServletRequest;
    import org.apache.shiro.authz.AuthorizationException;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.HttpRequestMethodNotSupportedException;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RestControllerAdvice;
    import org.springframework.web.servlet.ModelAndView;
    import com.ruoyi.common.core.domain.AjaxResult;
    import com.ruoyi.common.exception.BusinessException;
    import com.ruoyi.common.exception.DemoModeException;
    import com.ruoyi.common.utils.ServletUtils;
    import com.ruoyi.common.utils.security.PermissionUtils;
    
    /**
     * 全局异常处理器
     * 
     * @author ruoyi
     */
    @RestControllerAdvice
    public class GlobalExceptionHandler
    {
        private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
    
        /**
         * 权限校验失败 如果请求为ajax返回json,普通请求跳转页面
         */
        @ExceptionHandler(AuthorizationException.class)
        public Object handleAuthorizationException(HttpServletRequest request, AuthorizationException e)
        {
            log.error(e.getMessage(), e);
            if (ServletUtils.isAjaxRequest(request))
            {
                return AjaxResult.error(PermissionUtils.getMsg(e.getMessage()));
            }
            else
            {
                ModelAndView modelAndView = new ModelAndView();
                modelAndView.setViewName("error/unauth");
                return modelAndView;
            }
        }
    
        /**
         * 请求方式不支持
         */
        @ExceptionHandler({ HttpRequestMethodNotSupportedException.class })
        public AjaxResult handleException(HttpRequestMethodNotSupportedException e)
        {
            log.error(e.getMessage(), e);
            return AjaxResult.error("不支持' " + e.getMethod() + "'请求");
        }
    
        /**
         * 拦截未知的运行时异常
         */
        @ExceptionHandler(RuntimeException.class)
        public AjaxResult notFount(RuntimeException e)
        {
            log.error("运行时异常:", e);
            return AjaxResult.error("运行时异常:" + e.getMessage());
        }
    
        /**
         * 系统异常
         */
        @ExceptionHandler(Exception.class)
        public AjaxResult handleException(Exception e)
        {
            log.error(e.getMessage(), e);
            return AjaxResult.error("服务器错误,请联系管理员");
        }
    
        /**
         * 业务异常
         */
        @ExceptionHandler(BusinessException.class)
        public Object businessException(HttpServletRequest request, BusinessException e)
        {
            log.error(e.getMessage(), e);
            if (ServletUtils.isAjaxRequest(request))
            {
                return AjaxResult.error(e.getMessage());
            }
            else
            {
                ModelAndView modelAndView = new ModelAndView();
                modelAndView.addObject("errorMessage", e.getMessage());
                modelAndView.setViewName("error/business");
                return modelAndView;
            }
        }
    
        /**
         * 演示模式异常
         */
        @ExceptionHandler(DemoModeException.class)
        public AjaxResult demoModeException(DemoModeException e)
        {
            return AjaxResult.error("演示模式,不允许操作");
        }
    }
    

      

    公用result

    package com.ruoyi.common.core.domain;
    
    import java.util.HashMap;
    import org.apache.commons.lang3.builder.ToStringBuilder;
    import org.apache.commons.lang3.builder.ToStringStyle;
    import com.ruoyi.common.utils.StringUtils;
    
    /**
     * 操作消息提醒
     * 
     * @author ruoyi
     */
    public class AjaxResult extends HashMap<String, Object>
    {
        private static final long serialVersionUID = 1L;
    
        public static final String CODE_TAG = "code";
    
        public static final String MSG_TAG = "msg";
    
        public static final String DATA_TAG = "data";
    
        /**
         * 状态类型
         */
        public enum Type
        {
            /** 成功 */
            SUCCESS(0),
            /** 警告 */
            WARN(301),
            /** 错误 */
            ERROR(500);
            private final int value;
    
            Type(int value)
            {
                this.value = value;
            }
    
            public int value()
            {
                return this.value;
            }
        }
    
        /** 状态类型 */
        private Type type;
    
        /** 状态码 */
        private int code;
    
        /** 返回内容 */
        private String msg;
    
        /** 数据对象 */
        private Object data;
    
        /**
         * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
         */
        public AjaxResult()
        {
        }
    
        /**
         * 初始化一个新创建的 AjaxResult 对象
         * 
         * @param type 状态类型
         * @param msg 返回内容
         */
        public AjaxResult(Type type, String msg)
        {
            super.put(CODE_TAG, type.value);
            super.put(MSG_TAG, msg);
        }
    
        /**
         * 初始化一个新创建的 AjaxResult 对象
         * 
         * @param type 状态类型
         * @param msg 返回内容
         * @param data 数据对象
         */
        public AjaxResult(Type type, String msg, Object data)
        {
            super.put(CODE_TAG, type.value);
            super.put(MSG_TAG, msg);
            if (StringUtils.isNotNull(data))
            {
                super.put(DATA_TAG, data);
            }
        }
    
        /**
         * 返回成功消息
         * 
         * @return 成功消息
         */
        public static AjaxResult success()
        {
            return AjaxResult.success("操作成功");
        }
    
        /**
         * 返回成功数据
         * 
         * @return 成功消息
         */
        public static AjaxResult success(Object data)
        {
            return AjaxResult.success("操作成功", data);
        }
    
        /**
         * 返回成功消息
         * 
         * @param msg 返回内容
         * @return 成功消息
         */
        public static AjaxResult success(String msg)
        {
            return AjaxResult.success(msg, null);
        }
    
        /**
         * 返回成功消息
         * 
         * @param msg 返回内容
         * @param data 数据对象
         * @return 成功消息
         */
        public static AjaxResult success(String msg, Object data)
        {
            return new AjaxResult(Type.SUCCESS, msg, data);
        }
    
        /**
         * 返回警告消息
         * 
         * @param msg 返回内容
         * @return 警告消息
         */
        public static AjaxResult warn(String msg)
        {
            return AjaxResult.warn(msg, null);
        }
    
        /**
         * 返回警告消息
         * 
         * @param msg 返回内容
         * @param data 数据对象
         * @return 警告消息
         */
        public static AjaxResult warn(String msg, Object data)
        {
            return new AjaxResult(Type.WARN, msg, data);
        }
    
        /**
         * 返回错误消息
         * 
         * @return
         */
        public static AjaxResult error()
        {
            return AjaxResult.error("操作失败");
        }
    
        /**
         * 返回错误消息
         * 
         * @param msg 返回内容
         * @return 警告消息
         */
        public static AjaxResult error(String msg)
        {
            return AjaxResult.error(msg, null);
        }
    
        /**
         * 返回错误消息
         * 
         * @param msg 返回内容
         * @param data 数据对象
         * @return 警告消息
         */
        public static AjaxResult error(String msg, Object data)
        {
            return new AjaxResult(Type.ERROR, msg, data);
        }
    
        public Type getType()
        {
            return type;
        }
    
        public void setType(Type type)
        {
            this.type = type;
        }
    
        public int getCode()
        {
            return code;
        }
    
        public void setCode(int code)
        {
            this.code = code;
        }
    
        public String getMsg()
        {
            return msg;
        }
    
        public void setMsg(String msg)
        {
            this.msg = msg;
        }
    
        public Object getData()
        {
            return data;
        }
    
        public void setData(Object data)
        {
            this.data = data;
        }
    
        @Override
        public String toString() {
            return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
                .append("code", getCode())
                .append("msg", getMsg())
                .append("data", getData())
                .toString();
        }
    }
    

      

  • 相关阅读:
    分布式事务基本概念
    rocketmq源码分析3-consumer消息获取
    Mac下的Eclipse不能记住工作空间问题
    rocketmq源码分析2-broker的消息接收
    rocketmq源码分析1-benchmark学习
    metrics
    slf4j与logback对接是如何将日志写到控制台的
    Spring AOP
    hibernate数据库连接池,常用配置
    动态代理
  • 原文地址:https://www.cnblogs.com/412013cl/p/11077900.html
Copyright © 2020-2023  润新知