码迷,mamicode.com
首页 > 编程语言 > 详细

springboot自定义异常和全局异常处理

时间:2018-10-29 15:59:40      阅读:803      评论:0      收藏:0      [点我收藏+]

标签:extends   getc   模拟   pack   may   就会   col   override   封装   

模拟开发过程中的异常处理:

场景:

  如果不对异常处理,返回给前端的将是一个异常错误页日志

  所以要异常处理

首先准备个工具类:作为返回给前端的JsonData数据封装:

  此类也可以作为工具类直接使用。

package net.myclass.myvideo.domain;

import java.io.Serializable;

/**
 * 功能描述:工具类
 *
 * <p> 创建时间:May 14, 2018 7:58:06 PM </p>
 */
public class JsonData implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private Integer code; // 状态码 0 表示成功,1表示处理中,-1表示失败
    private Object data; // 数据
    private String msg;// 描述

    public JsonData() {
    }

    public JsonData(Integer code, Object data, String msg) {
        this.code = code;
        this.data = data;
        this.msg = msg;
    }

    // 成功,传入数据
    public static JsonData buildSuccess() {
        return new JsonData(0, null, null);
    }

    // 成功,传入数据
    public static JsonData buildSuccess(Object data) {
        return new JsonData(0, data, null);
    }

    // 失败,传入描述信息
    public static JsonData buildError(String msg) {
        return new JsonData(-1, null, msg);
    }

    // 失败,传入描述信息,状态码
    public static JsonData buildError(String msg, Integer code) {
        return new JsonData(code, null, msg);
    }

    // 成功,传入数据,及描述信息
    public static JsonData buildSuccess(Object data, String msg) {
        return new JsonData(0, data, msg);
    }

    // 成功,传入数据,及状态码
    public static JsonData buildSuccess(Object data, int code) {
        return new JsonData(code, data, null);
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    @Override
    public String toString() {
        return "JsonData [code=" + code + ", data=" + data + ", msg=" + msg
                + "]";
    }

}

 

下面开始处理异常:

1.自定义异常类的开发:

package net.myclass.myvideo.exception;


/**
 * 自定义异常类
 */
public class MyException extends RuntimeException {


    /**
     * 状态码
     */
    private Integer code;
    /**
     * 异常消息
     */
    private String msg;




    public MyException(int code, String msg){
        super(msg);
        this.code = code;
        this.msg = msg;
    }

    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;
    }
}

 

2.异常管理类的开发:

  配置value,捕获异常;

  当捕获的异常为自定义异常,则处理自定义异常

  当捕获的为其他异常,统一处理为全局异常(未知错误)

  注意:

    如果value=MyException.class,则只处理MyException,不用加下面的判断条件直接return即可

package net.myclass.myvideo.exception;


import net.xdclass.xdvideo.domain.JsonData;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 异常处理控制器
 */
@ControllerAdvice
public class MyExceptionHandler {

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public JsonData Handler(Exception e){

        if(e instanceof MyException){
            MyException myException =  (MyException)e;
            return JsonData.buildError(myException.getMsg(),myException.getCode());
        }else{
            return JsonData.buildError("全局异常,未知错误");
        }
    }


}

 这样封装之后一旦捕获了异常,就会返回一个JsonData给前端了

springboot自定义异常和全局异常处理

标签:extends   getc   模拟   pack   may   就会   col   override   封装   

原文地址:https://www.cnblogs.com/big-cut-cat/p/9870655.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!