Springboot 自定义异常和全局异常信息的处理

        在程序中,我们往往需要对异常的级别做处理,做数据记录,或者发送邮件预警处理,接下来我们在springboot程序中,实现自定义的异常处理和全局异常处理。

      首先是自定义异常,我们自定义一个类,定义你需要返回的 code 和 message,需要更多的处理信息可以自行追加

package com.hqk.bootdemo.util;

/**
 * <p>自定义异常处理信息</p >
 *
 * @author hqk
 * @version 1.0: MyException.java v0.1 2019/6/19 上午10:55 hqk Exp$
 */
public class MyException extends RuntimeException{

    //异常状态码
    private String code;

    //异常信息
    private String message;


    public MyException(String code, String message) {
        this.code = code;
        this.message = message;
    }

    public String getCode() {
        return code;
    }

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

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

在springboot中,我们可以使用  @ControllerAdvice 或者 @RestControllerAdvice 注解来处理异常,前者需要加上 @ResponseBody 才能返回 json 数据 

package com.hqk.bootdemo.util;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;
import java.util.Map;

/**
 * <p>异常处理</p >
 *
 * @author hqk
 * @version 1.0: AllControllerAdvice.java v0.1 2019/6/19 上午10:48 hqk Exp$
 */
@RestControllerAdvice
public class AllControllerAdvice {


    /**
     * 自定义异常处理
     * @param e
     * @return
     */
    @ExceptionHandler(value = MyException.class)
    public Map<String,Object> customexceptionHandler(MyException e){

        Map<String,Object> map  = new HashMap<String,Object>();

        map.put("code",e.getCode());
        map.put("msg",e.getMessage());
        map.put("data",null);

        //可以对异常进行日志记录,写入数据库 或者 发送邮件预警
        // if(e.getCode().equals("110")){ 写入数据库 或者 发送邮件预警  }
        // log.info("错误信息"+e.getMessage());

        return map;
    }


    /**
     * 全局异常处理
     * @param e
     * @return
     */
    @ExceptionHandler(value = Exception.class)
    public Map<String,Object> exceptionHandler(Exception e){

        Map<String,Object> map  = new HashMap<String,Object>();

        map.put("code","01");
        map.put("msg",e.getMessage());
        map.put("data",null);

        return map;
    }
}

接下来,我们写个 controller 进行测试 自定义异常 和 全局异常

package com.hqk.bootdemo.controller;

import com.hqk.bootdemo.util.MyException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * <p></p >
 *
 * @author hqk
 * @version 1.0: HelloController.java v0.1 2019/6/18 下午3:54 hqk Exp$
 */
@RestController
@RequestMapping("/app/system")
public class HelloController {


    @RequestMapping("version")
    public Map<String, Object> getHello() {

        Map<String, Object> map = new HashMap<>();

        map.put("code", "00");
        map.put("msg", "请求成功");

        try {

            //抛异常
            System.out.println(1 / 0);

        } catch (Exception e) {

            //抛出自定义异常信息
            throw new MyException("110", "这是个重大的bug,请马上处理");
        }


        return map;

    }


    @RequestMapping("hello")
    public Map<String, Object> getHai() {

        Map<String, Object> map = new HashMap<>();

        map.put("code", "00");
        map.put("msg", "请求成功");
        
        System.out.println(1 / 0);

        return map;

    }



}

接下来我们打开浏览器进行测试,如图,分别打印自定义异常信息 和全局异常信息

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值