zoukankan      html  css  js  c++  java
  • 八、统一异常处理

    一、消息数据统一返回给前台的处理方法
     1、新建一个公共Result<T>类包含 code、msg、data私有变量,并提供set 和get 方法。(固定格式)
    /**
     * http请求返回的最外层对象
     */
    public class Result<T> {
        /*错误码*/
        private Integer code;
        /*提示信息*/
        private  String msg;
        /*具体内容*/
        private T data;
    
        public Integer getCode() {
            return code;
        }
        public void setCode(Integer code) {
            this.code = code;
        }
        public String getMsg() {
            return msg;
        }
        public void setMsg(String msg) {
            this.msg = msg;
        }
        public T getData() {
            return data;
        }
        public void setData(T data) {
            this.data = data;
        }
    }
    2、新建一个ResultUtil工具类,编写静态方法,统一调用这个方法向前台返回

    /**
     * 前端访问数据返回处理工具类
     * 依赖Result类
     */
    public class ResultUtil {
        /**
         * 带数据的成功返回的方法
         * @param object 数据对象
         * @return
         */
        public static Result success(Object object){
            Result result = new Result();
            result.setCode(0);
            result.setMsg("成功");
            result.setData(object);
            return result;
        }
    
        /**
         * 不带数据的成功返回的方法
         * @return
         */
        public static Result success(){
            Result result = new Result();
            result.setCode(0);
            result.setMsg("成功");
            return result;
        }
    
        /**
         * 返回失败的方法
         * @param code 错误代码
         * @param msg   返回消息
         * @return
         */
        public static Result error(Integer code,String msg){
            Result result = new Result();
            result.setCode(code);
            result.setMsg(msg);
            return result;
        }
    }
    二、通过异常统一处理返回给前台的处理方法
     1、创建一个枚举,统一管理返回的code和message(相当于配置文件)
    package com.du.enums;
    
    /**
     * 用来统一管理异常的code 和message
     */
    public enum ResultEnum {
        UNKONW_ERROR(-1,"未知错误"),
        SUCCESS(0,"成功"),
        PRIMARY_SCHOOL(100,"你可能在上小学"),
        MIDDLE_SCHOOL(101,"你可能在上初中"),
        ;
        private Integer code;
    
        private String  message;
    
        ResultEnum(Integer code, String message) {
            this.code = code;
            this.message = message;
        }
    
        public Integer getCode() {
            return code;
        }
    
        public String getMessage() {
            return message;
        }}
    2、定义一个自己的异常,自定义返回数据格式
    package com.du.Exception;
    
    import com.du.enums.ResultEnum;
    
    public class GrilException extends RuntimeException{
        //spring框架仅仅对RuntimeException抛出的异常进行回滚,
        //Exception不会所以继承该异常
        private Integer code;
    
        public GrilException(ResultEnum resultEnum) {
            super(resultEnum.getMessage());
            this.code = resultEnum.getCode();
        }
    
        public Integer getCode() {
            return code;
        }
    
        public void setCode(Integer code) {
            this.code = code;
        }
    }
    3、进行捕获异常获取数据,未知错误情况下打印日志
    package com.du.handle;
    
    import com.du.Exception.GrilException;
    import com.du.domain.Result;
    import com.du.utils.ResultUtil;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    
    /**
     *handle包必须和controller、service包同级,
     * 这样controller中抛出异常的时候才会被自动调用
     */
    @ControllerAdvice//增强型控制器,对于控制器的全局配置放在同一个位置
    public class ExceptionHandle {
    
        private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);
        
        @ExceptionHandler(value=Exception.class)//捕获的异常类型
        @ResponseBody//没有@RestController这样写向前台返回数据
        public Result handle(Exception e){
            if(e instanceof GrilException){//判断异常是否为自定义的
                GrilException grilException = (GrilException) e;
                return  ResultUtil.error(grilException.getCode(),grilException.getMessage());
            }else{
                logger.error("【系统异常】{}",e);
                return ResultUtil.error(-1,"未知错误");
            }
      }
    }
  • 相关阅读:
    进程与线程
    the art of seo(chapter seven)
    the art of seo(chapter six)
    the art of seo(chapter five)
    the art of seo(chapter four)
    the art of seo(chapter three)
    the art of seo(chapter two)
    the art of seo(chapter one)
    Sentinel Cluster流程分析
    Sentinel Core流程分析
  • 原文地址:https://www.cnblogs.com/404code/p/10569171.html
Copyright © 2011-2022 走看看